java url 缩略图_java根据url生成网页截图,缩略图 | 学步园
public class ShotsPic extends JPanel {
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;");
}
public ShotsPic( String url) {
super(new BorderLayout());
JPanel webBrowserPanel = new JPanel(new BorderLayout());
final String fileName = "screenShots.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) {
//动态执行JS 最终返回网页的实际的宽度和高度
String result = (String) webBrowser.executeJavascriptWithResult(jsDimension.toString());
System.out.println(result);
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);
imageSize.height = Math.max(originalSize.height,imageSize.height);
System.out.println(imageSize.width);
System.out.println(imageSize.height);
nativeComponent.setSize(imageSize);
BufferedImage image = new BufferedImage(imageSize.width,imageSize.height, BufferedImage.TYPE_INT_RGB);
nativeComponent.paintComponent(image);
//nativeComponent.setSize(imageSize);
// 当网页超出目标大小时
/*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("E:\\"+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() {
JFrame frame = new JFrame("以DJ组件保存指定网页截图");
frame.getContentPane().add(
new ShotsPic("www.qq.com"),
BorderLayout.CENTER);
frame.setSize(1280, 768);
// 仅初始化,但不显示
frame.invalidate();
frame.pack();
frame.setVisible(false);
}
});
NativeInterface.runEventPump();
}
}
程序需要三个包:
java url 缩略图_java根据url生成网页截图,缩略图 | 学步园相关推荐
- java dll 乱码_java调用c++ dll出现中文乱码 | 学步园
最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下 ...
- java biginteger使用_java中的BigInteger的基本用法 | 学步园
注 : 为了更好的理解BigInteger类,特提供了一篇关于BigInteger的题目及本人的解答,感兴趣的朋友可以到我的博客看一下 import java.math.BigInteger; pub ...
- java 栈 泛型_java 泛型栈(数组实现) | 学步园
尝试将一些数据结构用java实现,尝试过程中确实碰到一些问题,收获很大import java.lang.reflect.Array; class ArrayStack { Class type; pr ...
- java ip 国家_java通过ip获取用户所在国家 | 学步园
什么是GeoIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息的一个数据库.GeoIP有两个版本,一个免费版,一个收费版本.收费版本的准确率和数据更 ...
- java web定时器_java的web项目中使用定时器 | 学步园
之前接触过程序中的定时任务,但是没去自己亲自尝试过.终于这次抽空搞了一下.(一定要自己去操作,才能长经验,光看到过是没用的) 以下是两种方法,我使用的是监听的方法. JAVA WEB定时器,定时器的启 ...
- java url 协议_Java自定义URL协议
Java提供了对URL协议进行扩展的能力,通过扩展用户可以自定义URL通信协议,JDK默认提供了对HTTP,FTP,JAR,FILE等的实现,而当需要自己定义通信协议的时候,就需要利用JDK提供的对U ...
- java.net.url 兼容_java.net.Url类的应用(网络编程)
一.认识URL 类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是更为复杂的对象的引用,例如对数据库或搜索引擎的查询. 简单的可 ...
- java 图形校验_java图形验证码生成工具类 web页面校验验证码
java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...
- java 优酷视频缩略图_java获取优酷等视频缩略图
类型:Android平台大小:6.8M语言:中文 评分:7.2 标签: 立即下载 想获取优酷等视频缩略图,在网上没有找到满意的资料,参考了huangdijia的PHP版工具一些思路,写了下面的JAVA ...
最新文章
- 内存都是由半导体器件构成的_开启5G新时代——XPS成像技术在半导体器件中的应用...
- 简谈造成循环引用的原因以及处理办法
- 编程问题难解决,学会提问是关键!
- Linux内核 crypto文件夹 密码学知识学习
- Spring之WebSocket网页聊天以及服务器推送
- python多因子量化选股模型_量化新兵第十步:多因子选股模型
- layUI日期框回调函数
- Unreal Engine 开篇
- 拓端tecdat|用RSHINY DASHBOARD可视化美国投票记录
- 9)Thymeleaf ⼯具类对象表达式
- 单片机c语言信号灯定时编程,单片机定时器控制交通灯程序1
- 计算机机械制图试题及答案,机械制图习题集-附带答案
- 微信开放平台----微信扫码登录
- Thinkphp6 think-queue redis 执行异步任务
- 如何修改手游版本服务器,原神怎么只下一次客户端 b服官服渠道服手机自由切换方法...
- 哥德巴赫猜想:任意大于6的偶数都可以被分解成两个素数之和
- spss分析方法-多个独立样本检验(转载)
- Java 优惠券最优使用实现
- 使用git工具提交上传代码到GitHub上或者远程仓库
- h5的开源播放器组件
热门文章
- 力学,软体和刚体碰撞响应 以及 层次KDOP_OBB包围盒技术
- Linux基本常用命令
- 在centos中安装samba 服务
- [我的理解]Javascript的原型与原型链
- 基于jQ+CSS3页面滚动内容元素动画特效
- pycharm创建python虚拟环境好处_PyCharm虚拟环境创建Django2项目一些问题的解决方案...
- node path html模块,深入理解node.js之path模块
- linux 渲染程序图层管理,Linux驱动多图层开发--lcdc/framebuffer的注册(RK平台)
- java中读取logback日志文件_java 中使用logback日志,并实现日志按天分类压缩保存。...
- 清掉数据_值得收藏!面试中有哪些经典的数据库问题?