我得到bitbucket.org/luciad/webp-imageio在Ubuntu中工作,但我無法讓它在Windows中工作。如何在Windows中使用java將webp轉換爲png或jpg?
這是我在Ubuntu做:
下載WEBP-的ImageIO和libwebp源代碼(其他版本可以在google webp downloads repository找到)。
使用cmake編譯libwebp和webp-imageio,在webp-imageio中有一個
CMakefile.txt
文件。也許你需要修改它?然後你會得到webp-imageio.jar
和libwebp-imageio.so
(這將是.dll
在windows)放入java項目本地庫位置
libwebp-imageio.so
和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,編譯它在窗口(
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//Desktop//xixi.webp – Petro 2014-12-11 02:22:30
這不是問題 – RTM 2014-12-11 02:26:20
那麼如果它拋出一個空指針異常,那麼xixi.webp的位置必須是錯誤的。反而嘗試反斜槓,我使用反斜槓的Windows文件。 「/ home」會是一個Linux目錄,你的windows目錄是/ home還是C:/ home,或者它是嵌入到它自己的目錄中的? – Petro 2014-12-11 02:29:24