webp是Google公司旨在統(tǒng)一圖片格式標(biāo)準(zhǔn),結(jié)束gif, png, jpg 3分天下格局的一種圖片格式。圖片的大小要比其他格式的要更小,親測(cè)png轉(zhuǎn)化后可以節(jié)省80%。在圖片比較多的場(chǎng)景下,統(tǒng)一用webp可以極大的節(jié)省流量和訪問(wèn)速度,收益可觀。目前 js, php都有很好的庫(kù)加以支持,但是在java中,imageio庫(kù)目前還是不支持,需要我們自己去編譯動(dòng)態(tài)鏈接庫(kù)和jar包。
PHP下支持
php最新的gd庫(kù)已經(jīng)支持webp的轉(zhuǎn)化了,轉(zhuǎn)化比較簡(jiǎn)單。但是存在一個(gè)小bug, 圖片的大小為奇數(shù)時(shí)候,需要手動(dòng)padding \0 到文件末尾。
$created = imagewebp(imagecreatefrompng($originImageUrl), targetFile);
if (1 == filesize(targetFile) % 2) {
file_put_contents(targetFile, "\0", FILE_APPEND);
}
Java下支持
webp-imageio
開源庫(kù) 下載壓縮包到本地進(jìn)行編譯jar,工程用gradle來(lái)維護(hù)。libwebp
google-developer下載壓縮包到本地編譯動(dòng)態(tài)鏈接庫(kù)-不同平臺(tái)的動(dòng)態(tài)鏈接庫(kù)編譯出來(lái)是不同的。mac下是.dylib, windowns下是.dll, unix/linux下是.so. 我在mac和linux下編譯過(guò),記錄下linux下編譯過(guò)程。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 .
cmake如果裝的話,請(qǐng)自行下載安裝官網(wǎng) 安裝用法
./gradlew build -x test
- java project
將libwebp-imageio.so放入工程的當(dāng)前目錄,因?yàn)槟J(rèn)的java.library.path含工程當(dāng)前路徑。同時(shí)引入打好的luciad-webp-imageio-8f9b44b41902-0.6.0-SNAPSHOT.jar引入工程中。如果是maven工程的話,可以把jar先推到遠(yuǎn)程的倉(cāng)庫(kù)里。
- 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