2012-07-17 80 views
5

我在將文件bufferedimage寫入jpg文件時遇到了一些問題。 在我的方法,我得到一個bufferedimage作爲參數,我需要在文件級ImageIO無法將緩衝圖像寫入文件

這裏寫的是我在做什麼:

public boolean writeToFile(BufferedImage buff,String savePath) { 

     try { 

      System.out.println(buff.toString()); 
      ImageIO.write(buff, ".jpg", new File(savePath)); 
      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

這裏得到什麼用buff.toString()印刷:

[email protected]: type = 1 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0 IntegerInterleavedRaster: width = 1024 height = 172 #Bands = 3 xOff = 0 yOff = 0 dataOffset[0] 0 

程序沒有任何異常運行良好,但生成的JPG文件大小爲0 bytes

我TRIE d在不使用ImageIO的情況下書寫圖像:

public boolean writeToFile(BufferedImage buff,String savePath) { 



     try { 

      System.out.println("got image : " + buff.toString()); 
      Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); 
      ImageWriter writer = (ImageWriter)iter.next(); 
      ImageWriteParam iwp = writer.getDefaultWriteParam(); 


      iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
      iwp.setCompressionQuality(.5f); 


      File file = new File(savePath); 
      FileImageOutputStream output = new FileImageOutputStream(file); 
      writer.setOutput(output); 
      IIOImage image = new IIOImage(buff, null, null); 
      writer.write(null, image, iwp); 
      writer.dispose(); 

      return true; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 

而且這個工作絕對沒問題。

爲什麼它不能與ImageIO一起使用?

回答

8

從格式名稱中刪除.

ImageIO.write(buff, "jpg", new File(savePath)); 
+0

它的工作!謝謝 – JAVAGeek 2012-07-17 21:14:10

4

不管你信不信,它只是這個".jpg",將其更改爲「JPG」,它會正常工作。

我有同樣的問題,但我看着ImageIO,並發現這link