Java操作Google Webp图片格式转换实践
目录
webp压缩的好处
Java使用webp代码编译
Webp开源项目
nintha/webp-imageio-core
qwong/j-webp
可用的webp依赖和包
Webp 编解码
编码
解码
Webp遇到的坑
文件释放
阿里云Linux内核版本差异
webp压缩的好处
可以缩小网络传输和磁盘占用空间。
Java使用webp代码编译
webp-imageio
开源库 下载压缩包到本地进行编译jar,工程用gradle来维护。libwebp
google-developer下载压缩包到本地编译动态链接库-不同平台的动态链接库编译出来是不同的。mac下是.dylib, windowns下是.dll, unix/linux下是.so. 我在mac和linux下编译过,记录下linux下编译过程。compiling
libwebp-0.6.1.tar.gz luciad-webp-imageio-8f9b44b41902.ziptar -xzvf libwebp-0.6.1.tar.gz
unzip luciad-webp-imageio-8f9b44b41902.zip
mv libwebp-0.6.1 ./luciad-webp-imageio-8f9b44b41902/libwebp
cd luciad-webp-imageio-8f9b44b41902
cmake .
cmake --build .
cmake如果装的话,请自行下载安装官网 安装用法
./gradlew build -x test
- java project
将libwebp-imageio.so放入工程的当前目录,因为默认的java.library.path含工程当前路径。同时引入打好的luciad-webp-imageio-8f9b44b41902-0.6.0-SNAPSHOT.jar引入工程中。如果是maven工程的话,可以把jar先推到远程的仓库里。
- java transfer
image = ImageIO.read(new URL(imageUrl));
// Encode it as webp using default settings
boolean result = ImageIO.write(image, "webp", bos);
- gradle push to repositry
update build.gradle
apply plugin: "maven-publish" //插件required
group = "com.luciad.imageio.webp"publishing {publications {mavenJava(MavenPublication) {from components.java}}repositories {maven {url "http://***"credentials {username = ****password = ****}}}
}
publish
gradle publishMavenPublicationToMavenRepository
有时间的话可以自己编译,此处来自:https://www.jianshu.com/p/5827f9063fe9
Webp开源项目
nintha/webp-imageio-core
qwong/j-webp
可用的webp依赖和包
下载此开源项目没有跑起来,dll包有问题。直接使用0.4.2可以正常使用,下载地址如下:
- http://download.csdn.net/download/geeklei/8163329
- https://download.csdn.net/download/geeklei/8161731
- 链接:https://pan.baidu.com/s/1JZB_cNNr3Pf8sv2hdvu_-A
提取码:zvql
复制这段内容后打开百度网盘手机App,操作更方便哦
Webp 编解码
编码
package example;import com.luciad.imageio.webp.WebPWriteParam;import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class EncodeTest {public static void main(String args[]) throws IOException {String inputPngPath = "test_pic/test.png";String inputJpgPath = "test_pic/test.jpg";String outputWebpPath = "test_pic/test_.webp";// Obtain an image to encode from somewhereBufferedImage image = ImageIO.read(new File(inputJpgPath));// Obtain a WebP ImageWriter instanceImageWriter writer = ImageIO.getImageWritersByMIMEType("image/webp").next();// Configure encoding parametersWebPWriteParam writeParam = new WebPWriteParam(writer.getLocale());writeParam.setCompressionMode(WebPWriteParam.MODE_DEFAULT);// Configure the output on the ImageWriterwriter.setOutput(new FileImageOutputStream(new File(outputWebpPath)));// Encodelong st = System.currentTimeMillis();writer.write(null, new IIOImage(image, null, null), writeParam);System.out.println("cost: " + (System.currentTimeMillis() - st));}
}
解码
package example;import com.luciad.imageio.webp.WebPReadParam;import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.FileImageInputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class DecodeTest {public static void main(String args[]) throws IOException {System.load("C:\\Users\\admin\\Desktop\\webp\\webp-code\\webp-imageio-core\\src\\main\\resources\\META-INF\\lib\\windows_64\\webp-imageio.dll");String inputWebpPath = "test_pic/test.webp";String outputJpgPath = "test_pic/test_.jpg";String outputJpegPath = "test_pic/test_.jpeg";String outputPngPath = "test_pic/test_.png";// Obtain a WebP ImageReader instanceImageReader reader = ImageIO.getImageReadersByMIMEType("image/webp").next();// Configure decoding parametersWebPReadParam readParam = new WebPReadParam();readParam.setBypassFiltering(true);// Configure the input on the ImageReaderreader.setInput(new FileImageInputStream(new File(inputWebpPath)));// Decode the imageBufferedImage image = reader.read(0, readParam);ImageIO.write(image, "png", new File(outputPngPath));ImageIO.write(image, "jpg", new File(outputJpgPath));ImageIO.write(image, "jpeg", new File(outputJpegPath));}
}
Webp遇到的坑
文件释放
需要注意在用完文件流之后记得关闭,否则删除文件会失败
阿里云Linux内核版本差异
在三台Centos的阿里云 服务器上三个内核版本,其中有台服务器webp不报错但就是程序阻塞到webp调用然后返回http404:
正常内核版本:
异常内核版本:
更多阅读:
https://segmentfault.com/a/1190000016324137
https://blog.csdn.net/xu_san_duo/article/details/79085718
webp-imageio 如何编译及使用
Java操作Google Webp图片格式转换实践相关推荐
- 使用Google WebP图片格式帮助控制网站页面大小
日期:2013-3-16 来源:GBin1.com 不管你相信或者不相信,随着互联网的快速发展网页也在持续不断的变大. 使 网页迅速膨胀的罪魁祸首不是大量使用的JavaScript库,CSS和无尽的 ...
- 用java对imagemagick进行图片格式转换,例如heic转成jpg
在开发中上传图片功能中,会遇到上传heic格式的图片,但是目前对这格式是不支持,需要将格式转换成常见的jpg,png,jpeg等格式 "heic的格式是苹果针对iOS11专门研发的一个照片格 ...
- 【Android 安装包优化】WebP 图片转换 ( 使用 iSparta 转换 WebP 图片格式 | Google 提供的 libwebp 库 )
文章目录 一.使用 iSparta 转换 WebP 图片格式 二.Google 提供的 libwebp 库 三.参考资料 一.使用 iSparta 转换 WebP 图片格式 isparta 工具已经停 ...
- 什么是WebP图片格式?如何在线把Webp格式转换为JPEG格式?
我们有时候从互联网上下载图片会发现图片是WebP格式而不是常见的JPEG或者是PNG格式,用自带的图片处理软件无法打开,那么什么是WebP格式呢?我们该如何打开WebP格式的图片文件?需要进行图片处理 ...
- 【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )
文章目录 一.Android 中的 WebP 图片格式使用 二.WebP 格式转换 三.WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android St ...
- 图片格式转换 - .webp 转格式为 .png / .jpg
图片格式转换 - .webp 转格式为 .png / .jpg 很多时候,网页上素材图片格式出现了.webp格式的,PS无法正常打开查看或使用,所以需要转换一下其他格式(如.png / .jpg 等等 ...
- Python 实现图片格式转换,jpg\png\webp等,附源码
Python 实现图片格式转换,jpg\png\webp等,附源码 需要使用 PIL库,但python 3是无法安装该库的,如果是python 3安装pillow库即可. 1.安装 python 2 ...
- java 图片互转_JAVA 图片格式转换 jpg、jpeg、png格式互转
最近项目遇到一些图片格式的问题,于是就写下这边博客,帮助记忆,代码如下: public static void main(String[] args) { //原文件路径 String src = & ...
- 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )
文章目录 一.测试 WebP 图片解码速度 二.测试 WebP 图片编码速度 三.参考资料 测试结果 : WebP 格式图片 , 解码快 , 编码慢 , 占用空间小 ; 在解码速度上 , WebP 格 ...
最新文章
- springboot集成prometheus
- 通用权限管理系统组件 (GPM - General Permissions Manager) 给信息管理系统加一个初始化的功能,调用存储过程...
- html number方法,JavaScript Number 对象
- Service Mesh 为什么从“趋势”走向“无聊”?
- 表级锁的mysql读写_Mysql的表级锁
- elementUI响应式布局@media:基于断点的隐藏类
- linux删除目录下文件的几种方法
- scala迭代器_Scala选项和迭代器示例
- 网吧如何修改dns服务器地址,网吧更改dns服务器地址
- 计算机的管理选项文件错误,如何修复Microsoft Teams错误文件在Windows PC中被锁定...
- MD5 文件校验之 java 实现
- Dynamic Scoping (动态范围)
- python写api接口实战
- CentOS6.5X86_64系统定制文档详细版
- Dijkstra-POJ-2387-Til the Cows Come Home
- 怎么判断数据是否符合某个统计学分布
- 人工神经网络基础概念、原理知识(补)
- 5.3.2 求解复杂装载问题
- python彩票统计软件_python彩票分析软件
- Android开发之骚扰电话,谷歌发布了Android 11 第二个版本 还增加了一个强化骚扰电话拦截的API...
热门文章
- unity创建纹理_创建带纹理的文本的技术
- GDAL支持中文路径-属性表支持中文配置
- [日推荐]『本本海报』内含程序员福利,不可描述~
- web打印的几种方法(2023)
- python/改变图片尺寸及分辨率/填充透明图片背景颜色
- 叶国富创业24年,门店超五千家,名创优品年营收百亿
- Vue 实现商品分类、列表、详情、购物车、搜索(vant)
- java同步和异步的区别_java中同步与异步的区别是什么?表现在哪里?
- android api 22 later,Android getResources().getDrawable()不贊成的API 22。
- windows操作系统的自启动项