用于在服务器端生成网页缩略图的开源 Java 库 [关闭]
-
05-07-2019 - |
题
我正在寻找一个开源 Java 库来生成给定 URL 的缩略图。我需要捆绑此功能,而不是调用外部服务,例如 亚马逊 或者 网络快照.
http://www.webrenderer.com/ 这篇文章中提到: 服务器生成的网页截图, ,但它是一个商业解决方案。
我希望有一个基于 Java 的解决方案,但可能需要考虑执行外部进程,例如 khtml2png, ,或者整合类似的东西 html2ps.
有什么建议么?
解决方案
我首先想到的是使用 AWT 来捕获屏幕抓取(请参见下面的代码)。你可以看看捕获 J编辑器面板, , 这 日本DIC 网页浏览器 控制或 斯威特 浏览器 (通过 AWT 嵌入支持)。后两者嵌入了原生浏览器(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);
}
}
其他提示
您实际上要求Java可以访问完整的渲染引擎。就个人而言,我会为自己省去麻烦,并呼唤孩子的过程。
否则,我遇到了这个纯Java浏览器: Lobo
没有一个QA /测试网站/服务可以让你指定一个你想在某个浏览器(IE,FIREFOX,SAFARI版本x,y,z)中呈现的网页,他们会邮寄快照回复给你。 “
我记不起这项服务了 - 也许其他经常出现ajaxian的开发者可能会记住它?
尝试致电 ImageMagick 。我知道它不是Java解决方案,但你可以用Java调用它,甚至还有一个 Java前端,虽然我的成功不太好。
不隶属于 StackOverflow