webp是Google公司旨在统一图片格式标准,结束gif, png, jpg 3分天下格局的一种图片格式。图片的大小要比其他格式的要更小,亲测png转化后可以节省80%。在图片比较多的场景下,统一用webp可以极大的节省流量和访问速度,收益可观。目前 js, php都有很好的库加以支持,但是在java中,imageio库目前还是不支持,需要我们自己去编译动态链接库和jar包。
PHP下支持
php最新的gd库已经支持webp的转化了,转化比较简单。但是存在一个小bug, 图片的大小为奇数时候,需要手动padding \0
到文件末尾。
$created = imagewebp(imagecreatefrompng($originImageUrl), targetFile);
if (1 == filesize(targetFile) % 2) {
file_put_contents(targetFile, "\0", FILE_APPEND);
}
Java下支持
-
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.zip
tar -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 .
./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
网友评论