代码之家  ›  专栏  ›  技术社区  ›  Mads Hansen

开源Java库生成网页缩略图服务器端[关闭]

  •  14
  • Mads Hansen  · 技术社区  · 16 年前

    我正在寻找一个开源Java库来生成给定URL的缩略图。我需要将此功能捆绑在一起,而不是呼叫外部服务,例如 Amazon websnapr .

    http://www.webrenderer.com/ 在这篇文章中提到: Server generated web screenshots 但这是一个商业解决方案。

    我希望有一个基于Java的解决方案,但可能需要考虑执行一个外部过程,比如 khtml2png 或者整合类似的东西 html2ps .

    有什么建议吗?

    4 回复  |  直到 16 年前
        1
  •  6
  •   McDowell rahul gupta    16 年前

    首先想到的是使用awt捕获屏幕抓取(见下面的代码)。你可以看看捕捉 JEditorPane , the JDIC WebBrowser 控制或 SWT Browser (通过 AWT embedding support )后两个浏览器嵌入了本机浏览器(即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);
        }
    
    }
    
        2
  •  3
  •   Frank Krueger    16 年前

    本质上,你需要一个完全可以用Java访问的渲染引擎。就我个人而言,我会省去麻烦,并呼吁儿童进程。

    否则,我遇到了这个纯Java浏览器: Lobo

        3
  •  0
  •   anjanb    16 年前

    难道没有一个质量保证/测试网站/服务可以让你指定一个你想在某个浏览器中呈现的网页(例如,火狐,Safari版本X,Y,Z),他们会把快照发回到你的手里吗?

    我记不起服务了——也许其他经常使用Ajaxian的开发人员也会记得?

        4
  •  0
  •   Sietse    16 年前

    尝试呼叫 ImageMagick . 我知道它不是Java解决方案,但你可以从Java调用它,甚至还有一个 Java front-end 尽管我没有那么成功。