Java 图片压缩处理求助

2019-07-03 14:03:59 +08:00
 xiaojianbang
接到个需求,门户网站有大量的图片展示,对于一张图片规格上传到服务器,需要对图片进行多种格式大小转换。我搜了下使用 google 的 Thumbnailator 类库进行处理,虽然能够进行图片处理,但是达不到我的要求。
以下是我测试的例子:
上传一张 820*546 的图片,调用 Thumbnailator 类库的方法进行指定大小处理。(压缩成 300*200 的图片)
BufferedImage bufferedImage = Thumbnails.of(inputStream)
.size(wide, high)
.outputFormat(format)
.asBufferedImage();
最终得到的是一张 400*266 的图片。我都无语了,难道说任意大小的图片不能指定处理成要求的大小吗?
因为下午要展示,无奈让前端限制为 300*200,请教各位是否做过类型的需求,麻烦指点下。(公司要求不使用第三方服务)最好是这种开源的类库,或者开源的解决方案。跪求。
3926 次点击
所在节点    Java
11 条回复
xiaojianbang
2019-07-03 14:09:41 +08:00
需求紧急,大佬们支支招吧
xy2401
2019-07-03 14:11:51 +08:00
批处理第一个反应不是 命令行吗?
我一开始以为你说 无法压缩到指定大小 2M 这样。图片尺寸 无法指定不太可能吧。是不是代码写错了?
xiaojianbang
2019-07-03 14:23:40 +08:00
@xy2401 我这个是上传一张图片,在拿到图片的 inputStream 后调用 Thumbnailator 类库,进行指定图片指定宽高处理,可以保证代码是没有问题的,因为它要的也就宽高参数,最终图片也被压缩处理了,原图为 820*546,出来的是 400*266,而我想要的是 300*200。现在纠结在是不是没有办法指定尺寸。
maidmiku
2019-07-03 14:33:07 +08:00
@xiaojianbang 你调用那个 size 会锁定宽高比,你试一下 forceSize(int, int) 这个方法
limuyan44
2019-07-03 14:53:19 +08:00
Thumbnails.of("a.jpg").size(50, 60).keepAspectRatio(false).toFile("b.jpg");
limuyan44
2019-07-03 14:55:34 +08:00
正好测了一下,包我是 latest 版本。
xiaojianbang
2019-07-03 14:57:08 +08:00
@maidmiku 非常感谢,forceSize 方法替代 size 成功实现需求,果然 V2EX 大佬多,见识广
xiaojianbang
2019-07-03 14:58:27 +08:00
@limuyan44 非常感谢,去除锁定可以实现。学到了。哈哈
gz911122
2019-07-03 15:07:49 +08:00
luban 了解一下
chinjanry
2019-07-03 15:45:59 +08:00
这不就是我去年干过的一模一样的事么?
原生 java 图片尺寸(按比例)、大小、质量压缩,拿走不谢:
https://www.cnblogs.com/jsper/p/7652896.html
xiaojianbang
2019-07-04 10:25:13 +08:00
@chinjanry 谢谢,因为工期的问题暂时使用了 Thumbnailator,后面有时间我研究下原生处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/579634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX