gpt4 book ai didi

java - 生成网站缩略图?

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:11 25 4
gpt4 key购买 nike

对于我的应用程序,我需要动态创建网站的缩略图。到目前为止,我从 SO 获得了这段代码:

public class CreateWebsiteThumbnail {

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 {

Shell shell = new Shell();
Browser browser = new Browser(shell, SWT.EMBEDDED);
browser.setUrl("http://www.google.com");


CreateWebsiteThumbnail cap = new CreateWebsiteThumbnail();
cap.capture(What her?);
cap.save(new File("foo.png"), 64, 64);
}


}

但是正如您在这里看到的,我不知道应该将浏览器的哪一部分传递给我的捕获方法。有什么提示吗?

最佳答案

我不明白,您提供的代码如何工作。 Shell 没有打开,它没有大小,Browser 没有时间实际加载任何东西,似乎没有事件循环正在运行以启用任何绘图,。 ..

以下代码使用 SWT 浏览器截取页面:

import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class CreateWebsiteThumbnail {

private static final int WIDTH = 800;
private static final int HEIGHT = 600;


public static void main( String[] args ) throws IOException {
final Display display = new Display();
final Shell shell = new Shell();
shell.setLayout(new FillLayout());
final Browser browser = new Browser(shell, SWT.EMBEDDED);
browser.addProgressListener(new ProgressListener() {

@Override
public void changed( ProgressEvent event ) {}

@Override
public void completed( ProgressEvent event ) {
shell.forceActive();
display.asyncExec(new Runnable() {

@Override
public void run() {
grab(display, shell, browser);
}
});

}
});
browser.setUrl("http://www.google.com");

shell.setSize(WIDTH, HEIGHT);
shell.open();

while ( !shell.isDisposed() ) {
if ( !display.readAndDispatch() ) display.sleep();
}
display.dispose();
}

private static void grab( final Display display, final Shell shell, final Browser browser ) {
final Image image = new Image(display, browser.getBounds());
GC gc = new GC(browser);
gc.copyArea(image, 0, 0);
gc.dispose();

ImageLoader loader = new ImageLoader();
loader.data = new ImageData[] { image.getImageData() };
loader.save("foo.png", SWT.IMAGE_PNG);
image.dispose();

shell.dispose();
}

}

但是有一些严重的警告:

  • 您不能在屏幕外执行此操作。 SWT 屏幕截图只是当前显示的副本。
  • 截取屏幕截图时,包含您的浏览器的窗口必须在顶部。
  • 该页面应该在 onLoad 之后可见(实际上 google.com 不是这种情况,但由于 asyncExec 调用对我有用——如果你得到一个白色图像,请尝试另一个 URL)
  • 结果取决于您的操作系统及其安装的浏览器

我会选择非 Java 解决方案,以便脱离屏幕绘图。我相信链接的问题可能会帮助您更进一步。

关于java - 生成网站缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com