2

我让bitbucket.org/luciad/webp-imageio在 Ubuntu 中工作,但我无法让它在 Windows 中工作。

这是我在 Ubuntu 中所做的:

  1. 下载 webp-imageio 和libwebp源代码(其他版本可以在google webp 下载存储库中找到)。

  2. 使用cmake编译libwebp和webp-imageio,webp-imageio中有一个CMakefile.txt文件。也许你需要修改它?然后你会得到webp-imageio.jarand libwebp-imageio.so(它将.dll在 Windows 中)

  3. 放入libwebp-imageio.sojava 项目 Native 库位置和webp-imageio.jarjava 构建路径。

  4. 然后,运行以下代码:

File file1= new File("/home/rtm/Desktop/xixi.webp");  
File file2= new File("/home/rtm/Desktop/haha.png");  

System.loadLibrary("webp-imageio");
try {  
    BufferedImage im = ImageIO.read(file1);   
    ImageIO.write(im, "png", file2);  
} catch (IOException e) {  
    e.printStackTrace();  
}  
  1. webp-imageio.jar然后,我使用 cmake 和 mingw-w64,在 windows (和libwebp-imageio.dll)中编译它。但是,这不起作用,因为ImageIO.read(file1);返回 null。为什么?

这是我的 Windows 代码:

File file1 = new File("D://workspace//demo//Test//unnamed.webp");
File file2 = new File("D://workspace//demo//Test//xixi.png");

System.loadLibrary("webp-imageio");
try {
    //FileUtils.copyFile(file1, file2);
    BufferedImage im = ImageIO.read(file1);
    ImageIO.write(im, "png", file2);
} catch (Exception e) {
    e.printStackTrace();
}

这是异常堆栈:

java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(Unknown Source)
at javax.imageio.ImageIO.getWriter(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
4

1 回答 1

6

好吧,我通过使用谷歌预编译的 WebP 实用程序和库解决了这个问题。它只需要libWebp ,你可以在http://downloads.webmproject.org/releases/webp/index.html找到其他版本来匹配你的系统。然后在java中执行,代码如下:

    //the "dwebp.exe"'s path
    String str1 = "D:/workspace/demo/Test/libwebp-0.4.2-windows-x64/bin/dwebp.exe";
    //the webp picture's path
    String str2 = "D:/workspace/demo/Test/unnamed.webp";
    //the converted picture's path
    String str3 = "D:/workspace/demo/Test/xixi.png";
    args = new String[]{str1, str2, "-o", str3};

    try {
        Runtime.getRuntime().exec(args);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

它可以将 webp 转换为 PNG、JPEG、TIFF、WebP 或原始 Y'CbCr 样本。

于 2014-12-11T06:20:00.607 回答