webp圖片格式在java下的支持

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下支持

  1. webp-imageio
    開源庫(kù) 下載壓縮包到本地進(jìn)行編譯jar,工程用gradle來(lái)維護(hù)。

  2. 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ò)程。

  3. 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
  1. 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,276評(píng)論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • 66,同步訪問(wèn)共享的可變數(shù)據(jù) 關(guān)鍵字synchronized可以保證在同一時(shí)刻,只有一個(gè)線程可以執(zhí)行某一個(gè)方法,或...
    求閑居士閱讀 400評(píng)論 0 0
  • 清明假期前一天,我果斷的逃掉雙學(xué)位的課程,和小伙伴們離開大雨不斷的武漢,前往湖南。 旅程結(jié)束的時(shí)候,我們飛速地在開...
    沉默群像閱讀 507評(píng)論 0 0

友情鏈接更多精彩內(nèi)容