2008-10-04 7 views
14

오픈 소스 자바 라이브러리를 찾고 주어진 URL에 대한 썸네일을 생성하려고합니다. 외부 서비스 (예 : Amazon 또는 websnapr)를 호출하는 대신이 기능을 번들로 제공해야합니다.웹 페이지 썸네일을 생성하는 오픈 소스 자바 라이브러리 서버 측

http://www.webrenderer.com/이 게시물에 언급되어 있습니다 : Server generated web screenshots, 그러나 그것은 상용 솔루션입니다.

자바 기반 솔루션을 원하지만 khtml2png과 같은 외부 프로세스를 실행하거나 html2ps과 같은 것을 통합해야 할 수도 있습니다.

제안 사항?

답변

6

가장 먼저 떠오르는 것은 AWT를 사용하여 화면 캡처를 캡처하는 것입니다 (아래 코드 참조). JEditorPane, JDICWebBrowser 컨트롤 또는 SWTBrowser (AWT embedding support 통해)을 캡처 할 수 있습니다. 후자의 두 개는 네이티브 브라우저 (IE, Firefox)를 포함하므로 의존성을 도입합니다. JEditorPane HTML 지원은 HTML 3.2에서 중단되었습니다. 이들 중 어느 것도 헤드리스 시스템에서 작동하지 않을 수도 있습니다.

import java.awt.Component; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JLabel; 

public class Capture { 

    private static final int WIDTH = 128; 
    private static final int HEIGHT = 128; 

    private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, 
      BufferedImage.TYPE_INT_RGB); 

    public void capture(Component component) { 
     component.setSize(image.getWidth(), image.getHeight()); 

     Graphics2D g = image.createGraphics(); 
     try { 
      component.paint(g); 
     } finally { 
      g.dispose(); 
     } 
    } 

    private BufferedImage getScaledImage(int width, int height) { 
     BufferedImage buffer = new BufferedImage(width, height, 
       BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = buffer.createGraphics(); 
     try { 
      g.drawImage(image, 0, 0, width, height, null); 
     } finally { 
      g.dispose(); 
     } 
     return buffer; 
    } 

    public void save(File png, int width, int height) throws IOException { 
     ImageIO.write(getScaledImage(width, height), "png", png); 
    } 

    public static void main(String[] args) throws IOException { 
     JLabel label = new JLabel(); 
     label.setText("Hello, World!"); 
     label.setOpaque(true); 

     Capture cap = new Capture(); 
     cap.capture(label); 
     cap.save(new File("foo.png"), 64, 64); 
    } 

} 
3

본질적으로 Java로 액세스 할 수있는 완벽한 렌더링 엔진을 요구하고 있습니다. 개인적으로, 나는 번거 로움을 덜어 주며 자식 프로세스를 호출합니다. Lobo

0

했다 거기 당신은 당신이 특정 브라우저에서 렌더링 할 싶어 웹 페이지를 지정할 것 QA/테스트 웹 사이트/서비스 (IE :

그렇지 않으면,이 순수 자바 브라우저에 달렸다 , FIREFOX, SAFARI 버전 x, y, z) 스냅 샷을 다시 메일로 보냅니다. '

나는 서비스를 기억할 수 없다. 아마 아약족을 자주 기억하는 다른 개발자들이 기억할지도 모르겠다.

0

ImageMagick으로 전화 해보십시오. Java 솔루션이 아니라는 것을 알고 있습니다. Java에서 호출 할 수는 있지만 Java front-end이 있습니다.