如何在 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.jar
和libwebp-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.jar
和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)
【问题讨论】:
您尝试过使用双斜杠吗?似乎是一个路径问题...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?的主要内容,如果未能解决你的问题,请参考以下文章
java 替换文本中的所有指定的字符串,比如#*替换为sq, #**替换为we, 我使用了replaceAll进行的替换
如何在带有 NetBeans 的 Windows Java 项目中使用 HDF5
如何在本地运行 Django 作为 Windows 可执行应用程序