webp图片格式在java下的支持

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

  1. webp-imageio
    开源库 下载压缩包到本地进行编译jar,工程用gradle来维护。

  2. libwebp
    google-developer下载压缩包到本地编译动态链接库-不同平台的动态链接库编译出来是不同的。mac下是.dylib, windowns下是.dll, unix/linux下是.so. 我在mac和linux下编译过,记录下linux下编译过程。

  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如果装的话,请自行下载安装官网 安装用法

./gradlew build -x test
  1. 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

你可能感兴趣的:(webp图片格式在java下的支持)