网站首页 > java教程 正文
在对接第三方平台上传商品时,会遇到平台上传图片有大小限制,聪明如我so easy,压缩一下图片再上传,但用JAVA图片压缩时,本地好好的,但在服务器实测竟然出现变色问题,在网上查了很多资料,各种方法都尝试过也无法解决。具体尝试过方案我就不多说,自行百度,都是泪,关键词:【JAVA图片压缩变色】。
最终在老运维的指导下,发现了一款越用越顺手的工具,可以绕过JAVA处理图片产生的各种问题。唯一缺点项目依赖了系统功能,在扩展程序时需要注意。
ImageMagick
ImageMagick可以调整图像大小,翻转,镜像,旋转,变形,剪切和变换图像,调整图像颜色,应用各种特殊效果或绘制文本,线条,多边形,椭圆和贝塞尔曲线。
ImageMagick是免费软件,可以即用型二进制分发形式提供,也可以作为源代码提供,您可以在开放应用程序和专有应用程序中使用,复制,修改和分发它们。它是在派生的Apache 2.0 许可下分发的。
可以运行平台:Linux, Windows, Mac Os X, iOS, Android OS, and others.
免费,多平台 ,搞他。
安装方法 下载 下一步 下一步 下一步 能不思考就不思考,有问题再说。
废话不多说,直接测试效果(具体有好多用法,自行百度一下)
直接上命令 压缩大小
magick convert 1.jpg -quality 80 2.jpg
压缩前后数据效果对比
在JAVA项目中使用
JAVA库中有 im4java、jmagick 等库,使用比较复杂,我更加倾向于使用命令行的方式去执行处理
引入hutool,不得不说,优秀的框架。
File file = null,tempFile = null;
try {
tempFile = File.createTempFile("image_temp", ".jpg");
file = File.createTempFile("image", ".jpg");
downloadPicture( url , tempFile);
if(isWindows()){ //判断平台 由于服务器用的是6 开发用7 命令行有变化
Process process = RuntimeUtil.exec( "magick" , "convert", tempFile.getAbsolutePath(),"-quality" ,"80" , file.getAbsolutePath() );
process.waitFor(30L,TimeUnit.SECONDS);
}else{
Process process = RuntimeUtil.exec("convert", tempFile.getAbsolutePath(),"-quality" ,"80" , file.getAbsolutePath() );
process.waitFor(30L,TimeUnit.SECONDS);
}
} catch (Exception e) {
logger.info("url={},e={}",url,e.getMessage());
e.printStackTrace();
} finally {
}
搞掂。发版完美运行,收工。
彩蛋
附上小实验,长图切图功能
根据图片的宽度 按照高1000px等比例切,全程自动完成,免计算,方便。
BufferedImage bfimg = ImageIO.read(new FileInputStream(sourceImg));
Process process = RuntimeUtil.exec( "magick" , "convert",
sourceImg.getAbsolutePath() ,"-crop" ,
bfimg.getWidth() + "x1000" ,
tgFile.getAbsolutePath() + "\\"+code+".jpg");
System.out.println( info );
process.waitFor(30L,TimeUnit.SECONDS);
- 上一篇: Java快速处理图片的方式(总结)
- 下一篇: 如何通过调整Java代码缩小安装包体
猜你喜欢
- 2024-11-18 一个小技巧,Maven 打 Jar 包体积缩小100倍
- 2024-11-18 两天两夜,1M图片优化到100kb
- 2024-11-18 Java 6 压缩字符串(Compressed String)
- 2024-11-18 Java 9 缩小字符串( Compact String)
- 2024-11-18 java实现对rar压缩包的解压
- 2024-11-18 看了就会:多线程下载图片并压缩,多线程下载能提高效率吗?
- 2024-11-18 Java 9 中的字符串(String)压缩的改进
- 2024-11-18 Java压缩算法性能比较
- 2024-11-18 Spire.PDF for Java 9.3.11 优化了压缩图片时内存的占用
- 2024-11-18 Java实现LWZ压缩算法
你 发表评论:
欢迎- 最近发表
-
- 搞趣网:我的世界全新皮肤包原始居民下载地址
- 我的世界拔刀剑MOD下载(我的世界拔刀剑mod下载国际版)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- 一些可以显著提高大型 Java 项目启动速度的尝试
- 常见的java敏感异常介绍(java 常见的异常)
- Java 开发者必看!三招实现外部 Jar 包动态加载(含热更新方案)
- Java JAR 启动内存参数配置指南:从基础设置到性能优化
- 对Spring MVC接口进行Mock测试(springmvc对外接口)
- 还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS
- 干掉OpenFeign,SpringBoot 3.0 自带的 HTTP 客户端真香!
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)