如何在 Windows 中使用 java 将 webp 转换为 png 或 jpg?

Posted

技术标签:

【中文标题】如何在 Windows 中使用 java 将 webp 转换为 png 或 jpg?【英文标题】:How to convert webp to png or jpg using java in windows? 【发布时间】:2021-10-22 20:42:08 【问题描述】:

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

这是我在 Ubuntu 中所做的:

    下载webp-imageio和libwebp源码(其他版本可以在google webp downloads repository找到)。

    使用cmake编译libwebp和webp-imageio,webp-imageio中有CMakefile.txt文件。也许你需要修改它?然后你会得到webp-imageio.jarlibwebp-imageio.so(在windows中会是.dll

    libwebp-imageio.so放在java项目Native库位置,webp-imageio.jar放在java构建路径中。

    然后,运行以下代码:

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();  
  
    然后,我使用cmake和mingw-w64,在windows中编译(webp-imageio.jarlibwebp-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)

【问题讨论】:

您尝试过使用双斜杠吗?似乎是一个路径问题...java通常需要双斜杠。 //home//rtm//桌面//xixi.webp 这不是问题 好吧,如果它抛出一个空指针异常,那么xixi.webp的位置肯定是错误的。尝试使用反斜杠,我对 windows 文件使用反斜杠。 “/home”将是一个 Linux 目录,您的 windows 目录是命名为 /home 还是 C:/home 还是嵌套在它自己的目录中? 不,完整的异常堆栈是 java.lang.IllegalArgumentException: image == null!在 javax.imageio.ImageTypeSpecifier.createFromRenderedImage(Unknown Source) 在 javax.imageio.ImageIO.getWriter(Unknown Source) 在 javax.imageio.ImageIO.write(Unknown Source),因为 imageio 无法解析 .webp 那么“image == null!”是什么意思?不应该是 'image != null' 还是 'image == null'? 【参考方案1】:

好吧,我通过使用google预编译的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 样本。

【讨论】:

以上是关于如何在 Windows 中使用 java 将 webp 转换为 png 或 jpg?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Maven项目转为Java Web项目

java 替换文本中的所有指定的字符串,比如#*替换为sq, #**替换为we, 我使用了replaceAll进行的替换

如何在带有 NetBeans 的 Windows Java 项目中使用 HDF5

如何在本地运行 Django 作为 Windows 可执行应用程序

如何在 Windows XP 下将所有已安装的 Java 版本导出到文本文件

如何将 Kafka (Java) 应用程序从 Windows 连接到 Linux 中的 Confluent