2014-12-11 360 views
1

我得到bitbucket.org/luciad/webp-imageio在Ubuntu中工作,但我無法讓它在Windows中工作。如何在Windows中使用java將webp轉換爲png或jpg?

這是我在Ubuntu做:

  1. 下載WEBP-的ImageIO和libwebp源代碼(其他版本可以在google webp downloads repository找到)。

  2. 使用cmake編譯libwebp和webp-imageio,在webp-imageio中有一個CMakefile.txt文件。也許你需要修改它?然後你會得到webp-imageio.jarlibwebp-imageio.so(這將是.dll在windows)

  3. 放入java項目本地庫位置libwebp-imageio.sowebp-imageio.jar在Java構建路徑。

  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(); 
} 
  • 然後,我使用的cmake和MinGW-W64,編譯它在窗口(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) 
    
    +0

    你試過用雙斜槓嗎?看起來像一個路徑問題... Java通常需要雙斜槓。 //home//rtm//Desktop//xixi.webp – Petro 2014-12-11 02:22:30

    +0

    這不是問題 – RTM 2014-12-11 02:26:20

    +0

    那麼如果它拋出一個空指針異常,那麼xixi.webp的位置必須是錯誤的。反而嘗試反斜槓,我使用反斜槓的Windows文件。 「/ home」會是一個Linux目錄,你的windows目錄是/ home還是C:/ home,或者它是嵌入到它自己的目錄中的? – Petro 2014-12-11 02:29:24

    回答

    2

    好,我使用谷歌預編譯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的樣本。

    相關問題