java 等比缩小、放大图片尺寸 20253482编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

java 等比缩小、放大图片尺寸
Created by Marydon on 2022-02-16 18:56
1.情景展示
在实际生活中,随着图片的质量和尺寸越来越大,我们在用图片进行网络传输的时候,往往受制于网速或者网站的影响,导致图片加载不出来;
没有办法的办法,就是:通过压缩图片的质量(清晰度)或者图片的尺寸(大小、像素),在java中,如何实现?
2.准备工作
我参考了网上通过java来实现的缩小图片尺寸的方法,不好使;
最终选择了Thumbnailator已经封装好的方法来调用,虽然已经是5前的代码了,但是,相较于java自身硬编码实现而言,依旧有很大优势。
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
3.解决方案
代码实现:
/* * 对图片进行等比缩小或放大 * @attention: * Thumbnails可以将修改后的图片转换成OutputStream、BufferedImage或者File * @date: 2022/2/16 18:37 * @param: imgInputPath 原图片路径 * @param: imgOutputPath 图片输出路径 * 可以更改原图片的格式(比如:原图片是png格式,我们可以在让其生成的时候变成非png格式) * @param: scale 图片比例 * @return: boolean 成功、失败 */ public static boolean compressPicBySize(String imgInputPath, String imgOutputPath, float scale) { boolean flag = false; String imgStatus = (scale > 1) ? "放大" : "缩小"; try { Thumbnails.of(imgInputPath).scale(scale).toFile(imgOutputPath); // 成功 flag = true; log.info("图片{}成功", imgStatus); } catch (IOException e) { e.printStackTrace(); log.error("图片{}失败:{}", imgStatus, e.getMessage()); } return flag; }
测试:
public static void main(String[] args) { compressPicBySize("C:\\Users\\Marydon\\Desktop\\wxd.png", "C:\\Users\\Marydon\\Desktop\\wxd.bmp", 0.1F);// 缩小到原来的10% }
我们可以看到:图片的尺寸相较于之前减少了90%。
如果想要,指定修改后的图片大小,可以使用下面这种方式:
查看代码
/* * 改变原图片尺寸 * @attention: * @date: 2022/2/16 18:17 * @param: imgPath 原图片路径 * @param: width 改变后的图片宽度 * @param: height 改变后的图片高度 * @param: format 输出图片格式 * @return: byte[] 改变后的图片流 */ public static byte[] changeImgSize(String imgPath, int width, int height, String format) { byte[] changedImage = null; ByteArrayOutputStream out = null; format = StringUtils.isNotEmpty(format) ? format : "png"; try { out = new ByteArrayOutputStream(); Thumbnails.of(imgPath).size(width, height).outputFormat(format).toOutputStream(out); changedImage = out.toByteArray(); } catch (IOException e) { log.error(e.getMessage()); } finally { // 关闭流 if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return changedImage; }
最后,如果想要压缩图片体积,不想更改原图片尺寸的话,见文末推荐。
与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。
您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!
↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/15901959.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构