最近项目中遇到这样一个问题,用户在线查看图片时,因为图片太大,而用户的网速差,导致图片加载失败。我们知道png的图片是无损的,相对于jpg格式,png格式占用的空间要大得多;因为项目历史原因,将所有图片改为jpg太麻烦,所以选择png有损压缩;在调研了一番之后,选择pngquant,官网介绍压缩率可以达到70%。
pngquant官网:https://pngquant.org/
源码:https://github.com/ImageOptim/libimagequant/tree/msvc
源码是C编写的,java需要通过JNI(java native interface)来调用,不了解JNI的同学可自行百度,简单来讲,JNI就是java像调用本地方法一样调用用C写的代码。
下载的libimagequant-msvc项目如下图。
1、将org/pngquant目录下的Image.java、PngQuant.java、Result.java编译成class文件。
javac org/pngquant/Image.java
javac org/pngquant/PngQuant.java
javac org/pngquant/Result.java
2、具体参考下面这个链接(需要开启VPN才能访问)。
http://hklifenote.blogspot.jp/2016/11/java-pngquant-png-jni.html
注意事项:
针对参考url中的项目,只能运行在win32的机器上,如果是win64位的系统,在用vs生成dll时,需要选择x64。