当前位置:首页 » 《随便一记》 » 正文

Java 转换 WebP 图片,使用 webp-imageio

16 人参与  2024年03月23日 15:55  分类 : 《随便一记》  评论

点击全文阅读


WebP 是 Google 推出的一种新型图片格式,相比于传统的 PNG/JPG 图片有着更小体积的优势,在当今 Web 中有着广泛的应用。但是 Java 和 JDK 本身不支持 WebP 图像,不过我们可以使用 webp-imageio 库来支持 WebP 图片。

顺便提一提其他库支持的方式。WebP 最早是这个 webp project of Luciad 库提供支持的,但它需要手动安装对应的动态链接库,非常不方便。qwong/j-webp 项目作者为了解决这个问题,改进了对动态链接库的读取方式,把从java.library.path读取改成了从项目 resource 文件中读取。虽然 qwong/j-webp 项目解决了动态链接库依赖问题,但是它并未对这些代码提供一个良好封装,于是有了 webp-imageio-core 提供一个可用的 jar 包,只要导入项目即可使用。虽然如此,但 webp-imageio-core 并未提供一个开放的 Maven 依赖,稍微有些不便,——所以最终选择了 webp-imageio。

首先加入依赖。

<!-- 支持图片格式 WebP --><dependency>    <groupId>org.sejda.imageio</groupId>    <artifactId>webp-imageio</artifactId>    <version>0.1.6</version></dependency>

读取 WebP 图片

像正常读取 Jpg/Png 那样,无须 import 其他包。

BufferedImage image = ImageIO.read(new File("/home/gc/my_image.webp"));System.out.printf("\nDimension of the image:%dx%d", image.getWidth(), image.getHeight());

无损压缩

接着我们试试转换 Jpg 到 WebP。首先使用无损格式保存图像,把WebPWriteParam#setCompressionType选项将压缩类型设置为LOSSLESS_COMPRESSION

/** * 无损压缩 */private static void convertJpegToWebpLossless() {    try {        BufferedImage image = ImageIO.read(new File("C:\\Users\\admin\\Desktop\\pbd00106jp-7.jpg"));        ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();        WebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());        writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);        // 设置无损        writeParam.setCompressionType(writeParam.getCompressionTypes()[WebPWriteParam.LOSSLESS_COMPRESSION]);        // 保存图片        writer.setOutput(new FileImageOutputStream(new File("C:\\Users\\admin\\Desktop\\sample.webp")));        writer.write(null, new IIOImage(image, null, null), writeParam);    } catch (IOException e) {        throw new RuntimeException(e);    }}

笔者试了比原来 jpg 更大数倍!原先 100kb 左右的 jpg 变成 400kb!

有损压缩

以下代码将读取 Jpg 图像并以 80%压缩质量(0% 具有最高压缩,100% 具有最高质量)将其保存为 WebP。

private static void convertJpegToWebpWithLossyCompression() {    try {        BufferedImage image = ImageIO.read(new File("C:\\Users\\admin\\Desktop\\pbd00106jp-7.jpg"));        ImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();        WebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());        writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);        // 设置有损压缩        writeParam.setCompressionType(writeParam.getCompressionTypes()[WebPWriteParam.LOSSY_COMPRESSION]);        //设置 80% 的质量. 设置范围 0-1        writeParam.setCompressionQuality(0.8f);        // Save the image        writer.setOutput(new FileImageOutputStream(new File("C:\\Users\\admin\\Desktop\\sample.webp")));        writer.write(null, new IIOImage(image, null, null), writeParam);    } catch (IOException e) {        throw new RuntimeException(e);    }}

笔者测试,80% 的压缩比就非常理想,100kb Jpg 变成 44kb!

小结

借助 webp-imageio 库,我们可以轻松地读取和写入 WebP 图像。


点击全文阅读


本文链接:http://zhangshiyu.com/post/84387.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1