经过比对分析发现使用Java内置的浏览器DJNativeSwing做,是最好的解决方法,下面是源码
用到的包如下:

DJNativeSwing-SWT.jar
DJNativeSwing.jar
org.eclipse.swt.win32.win32.x86_3.102.0.v20130605- 1544.jar (32位)
org.eclipse.swt.win32.win32.x86_64_3.100.1.v4236b.jar
(64位)

public class TestMain extends JPanel {  /** *  DJNativeSwing-SWT.jar*/  private static final long serialVersionUID = 1L;  // 行分隔符  final static public String LS = System.getProperty("line.separator", "/n");  // 文件分割符  final static public String FS = System.getProperty("file.separator", "//");  //以javascript脚本获得网页全屏后大小  final static StringBuffer jsDimension;  static {  jsDimension = new StringBuffer();  jsDimension.append("var width = 0;").append(LS);  jsDimension.append("var height = 0;").append(LS);  jsDimension.append("if(document.documentElement) {").append(LS);  jsDimension.append(  "  width = Math.max(width, document.documentElement.scrollWidth);")  .append(LS);  jsDimension.append(  "  height = Math.max(height, document.documentElement.scrollHeight);")  .append(LS);  jsDimension.append("}").append(LS);  jsDimension.append("if(self.innerWidth) {").append(LS);  jsDimension.append("  width = Math.max(width, self.innerWidth);")  .append(LS);  jsDimension.append("  height = Math.max(height, self.innerHeight);")  .append(LS);  jsDimension.append("}").append(LS);  jsDimension.append("if(document.body.scrollWidth) {").append(LS);  jsDimension.append(  "  width = Math.max(width, document.body.scrollWidth);")  .append(LS);  jsDimension.append(  "  height = Math.max(height, document.body.scrollHeight);")  .append(LS);  jsDimension.append("}").append(LS);  jsDimension.append("return width + ':' + height;");  }  //DJNativeSwing组件请于http://djproject.sourceforge<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>/main/index.html下载  public TestMain(final String url, final int maxWidth, final int maxHeight) {  super(new BorderLayout());  JPanel webBrowserPanel = new JPanel(new BorderLayout());  final String fileName = System.currentTimeMillis() + ".jpg";  final JWebBrowser webBrowser = new JWebBrowser(null);  webBrowser.setBarsVisible(false);  webBrowser.navigate(url);  webBrowserPanel.add(webBrowser, BorderLayout.CENTER);  add(webBrowserPanel, BorderLayout.CENTER);  JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));  webBrowser.addWebBrowserListener(new WebBrowserAdapter() {  // 监听加载进度  public void loadingProgressChanged(WebBrowserEvent e) {  // 当加载完毕时  if (e.getWebBrowser().getLoadingProgress() == 100) {  String result = (String) webBrowser  .executeJavascriptWithResult(jsDimension.toString());  int index = result == null ? -1 : result.indexOf(":");  NativeComponent nativeComponent = webBrowser  .getNativeComponent();  Dimension originalSize = nativeComponent.getSize();  Dimension imageSize = new Dimension(Integer.parseInt(result  .substring(0, index)), Integer.parseInt(result  .substring(index + 1)));  imageSize.width = Math.max(originalSize.width,  imageSize.width + 50);  imageSize.height = Math.max(originalSize.height,  imageSize.height + 50);  nativeComponent.setSize(imageSize);  BufferedImage image = new BufferedImage(imageSize.width,  imageSize.height, BufferedImage.TYPE_INT_RGB);  nativeComponent.paintComponent(image);  nativeComponent.setSize(originalSize);  // 当网页超出目标大小时  if (imageSize.width > maxWidth  || imageSize.height > maxHeight) {  //截图部分图形  image = image.getSubimage(0, 0, maxWidth, maxHeight);  /*此部分为使用缩略图 int width = image.getWidth(), height = image .getHeight(); AffineTransform tx = new AffineTransform(); tx.scale((double) maxWidth / width, (double) maxHeight / height); AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); //缩小 image = op.filter(image, null);*/  }  try {  // 输出图像  ImageIO.write(image, "jpg", new File(fileName));  } catch (IOException ex) {  ex.printStackTrace();  }  // 退出操作  System.exit(0);  }  }  }  );  add(panel, BorderLayout.SOUTH);  }  public static void main(String[] args) {  NativeInterface.open();  SwingUtilities.invokeLater(new Runnable() {  public void run() {  // SWT组件转Swing组件,不初始化父窗体将无法启动webBrowser  JFrame frame = new JFrame("以DJ组件保存指定网页截图");  // 加载指定页面,最大保存为640x480的截图  frame.getContentPane().add(  new TestMain("http://www.huanqiu.com/", 1024, 768),  BorderLayout.CENTER);  frame.setSize(1024, 768);  // 仅初始化,但不显示  frame.invalidate();  frame.pack();  frame.setVisible(false);  }  });  NativeInterface.runEventPump();  }
}  

JAVA将HTML转化图片最靠谱的方法相关推荐

  1. qt 中转化图片格式与大小的方法

    //将 QImage 转化为 QPixmapQImage img(":/2/enemytank-ico.gif");QPixmap pix;pix=QPixmap::fromIma ...

  2. java 实现pdf转化为批量图片(两步走)

    java 实现pdf转化为批量图片(两步走) 微信小程序先看pdf批量转图片效果 1.导入jar包 方法1:在maven中导入 <dependency><groupId>org ...

  3. java BASE64流 输出图片。

    java BASE64流 输出图片. 亲测3个请求都可用,没有测试性能问题.仅供参考 BASE64Decoder Eclipsse 类可能引用不了解决方案链接:http://blog.csdn.net ...

  4. JAVA上传文件图片到服务器保存

    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的   我这是提交一个文件和类型 <div style="border: 1px solid ...

  5. Java调用opencv实现图片去水印

    opencv实现图片去水印案例 Java调用opencv实现图片去水印 环境安装配置 IDEA下开发配置 测试案例 Java调用opencv实现图片去水印 最近项目中遇到个需求,图片去水印下载,由于上 ...

  6. java上传文件图片到服务器保存,Java上传文件图片到服务器的方法

    这里我记录一个比较简单方便操作的java上传文件图片到服务器并且保存,具体内容如下 首先是页面html的   我这是提交一个文件和类型 我是添加一张临时图片得到微信的media_id保存数据库! en ...

  7. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  8. JAVA 通过url下载图片保存到本地(亲测)

    //java 通过url下载图片保存到本地    public static void download(String urlString, int i) throws Exception {     ...

  9. java主界面设置背景图片_java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改)...

    java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改) 关注:223  答案:4  mip版 解决时间 2021-01-26 22:09 提问者非莪莫属 2021-01 ...

最新文章

  1. linux批量创建用户和密码
  2. git fetch比较差异
  3. mysql8.0创建属性,MySQL 8.0新特性 — 管理端口的使用简介
  4. 牛逼!Python常用数据类型的基本操作(长文系列第①篇)
  5. 首发 | 腾讯把需求和代码统一的内幕
  6. [C++] 匿名管道的理解与实现
  7. 2018蓝桥杯省赛---java---A---7(三体攻击)
  8. 分布式与系统架构的演变
  9. MAC 安装caffe 教程 排坑
  10. FusionChartsFree设置指南
  11. Google浏览器Chrome,永久开启flash支持的办法
  12. weka与mysql相连_Weka与MySQL连接配置
  13. BUUCTF Misc wp大合集(1)
  14. 手把手教你如何将chatgpt接入微信公众号
  15. JavaScript基础第06天笔记
  16. pytorch中DataLoader的num_workers
  17. 中国小三多,是因为女人缺乏精神上的独立,男人缺乏人格上的体面。
  18. 小程序源码:后台版本趣味测试微信小程序源码下载支持自定义问题等等
  19. 小明种苹果(100分)
  20. oracle常用知识,oracle的基本知识

热门文章

  1. 人类记忆系统之谜,也许就是这么回事儿
  2. TK教主:和玄武实验室有关的几个故事 | 人物志
  3. 《Qt编程入门》配套代码下载
  4. 服务器的安全应该从哪些角度考虑-中了挖矿病毒
  5. Oozie的安装和使用
  6. 排坑:运行win32com.client.Dispatch('Word.Application')和docx.Documents.Open()报错
  7. html下拉列表框做日期,几种常用的控件(下拉框 可选框 起止日期 在HTML页面直接读取当前时间)...
  8. python自动写作软件_火遍全网!3天学会Python自动化办公!
  9. 进销存软件单机两台或多台电脑能用吗
  10. xampp-windows-x64-7.3.3-0-VC15的安装与配置