2008-10-04 17 views
14

Tôi đang tìm kiếm thư viện Java nguồn mở để tạo hình thu nhỏ cho một URL nhất định. Tôi cần phải nhóm khả năng này, thay vì gọi ra các dịch vụ bên ngoài, chẳng hạn như Amazon hoặc websnapr.Thư viện Java nguồn mở để tạo hình thu nhỏ trang web phía máy chủ

http://www.webrenderer.com/ đã được đề cập trong bài đăng này: Server generated web screenshots, nhưng đó là giải pháp thương mại.

Tôi đang hy vọng cho giải pháp dựa trên Java, nhưng có thể cần xem xét thực hiện quy trình bên ngoài như khtml2png hoặc tích hợp một cái gì đó như html2ps.

Mọi đề xuất?

Trả lời

6

Điều đầu tiên bạn nghĩ đến là sử dụng AWT để chụp ảnh màn hình (xem mã bên dưới). Bạn có thể xem xét chụp JEditorPane, điều khiển JDICWebBrowser hoặc SWTBrowser (thông qua AWT embedding support). Hai trình duyệt gốc nhúng sau (IE, Firefox), do đó giới thiệu các phụ thuộc; sự hỗ trợ HTML JEditorPane dừng lại ở HTML 3.2. Nó có thể là không ai trong số này sẽ làm việc trên một hệ thống không đầu.

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

Về cơ bản, bạn yêu cầu một công cụ hiển thị hoàn chỉnh có thể truy cập được bằng Java. Cá nhân, tôi sẽ tiết kiệm cho mình những rắc rối và gọi ra một quá trình con.

Nếu không, tôi chạy vào trình duyệt Java này tinh khiết: Lobo

0

không có ở đó một QA/trang web thử nghiệm/dịch vụ mà sẽ cho phép bạn chỉ định một trang web mà bạn muốn được trả lại trong một trình duyệt nào đó (IE , FIREFOX, SAFARI phiên bản x, y, z) và họ sẽ gửi ảnh chụp nhanh cho bạn. '

Tôi không thể nhớ dịch vụ - có thể các nhà phát triển khác thường xuyên ajaxian có thể nhớ nó?

0

Hãy thử gọi ImageMagick. Tôi biết nó không phải là một giải pháp Java, nhưng bạn có thể gọi nó từ Java, và thậm chí có một Java front-end, mặc dù tôi đã có ít thành công với điều đó.