2014-04-23 83 views
0

我想讀一個PNG圖像的尺寸,但我會遇到下面的錯誤,而這樣做 -錯誤而讀取PNG圖像尺寸

Exception in thread "main" javax.imageio.IIOException: I/O error reading PNG header! 
at com.sun.imageio.plugins.png.PNGImageReader.readHeader(PNGImageReader.java:307) 
at com.sun.imageio.plugins.png.PNGImageReader.readMetadata(PNGImageReader.java:637) 
at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1212) 
at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1560) 
at javax.imageio.ImageIO.read(ImageIO.java:1422) 
at javax.imageio.ImageIO.read(ImageIO.java:1326) 

這裏是我的代碼導致了它 -

InputStream is = new ByteArrayInputStream(myImgByteArray); 
    BufferedImage image = ImageIO.read(is); 
    System.out.println("Height: " +image.getHeight()+ "Width: " +image.getWidth());   

有人可以請建議我需要做什麼來解決這個問題嗎?

+0

你確定你餵養與有效PNG數據'ImageIO'?您是否嘗試在某些圖像軟件中打開文件,並讓'ImageIO'直接讀取而不是提供流? – Thomas

+0

是的,我也是這麼做的。我試圖通過將圖像寫入輸出流來讀取文件。圖像正確顯示。閱讀尺寸時只能看到問題。 – rickygrimes

回答

0

您可以將用戶的其他方式來獲得圖像尺寸:

BufferedImage image = javax.imageio.ImageIO.read(new File(imageFilePath)); 
System.out.println(image.getHeight()); 
System.out.println(image.getWidth()); 
0

這取決於你是如何構建myImgByteArray。試試這個。

BufferedImage image = ImageIO.read(new FileInputStream((new File("resources/1.png")))); 
System.out.println("Height: " + image.getHeight() + "Width: " + image.getWidth()); 

你可以嘗試任何一個

// Read from same package 
ImageIO.read(getClass().getResourceAsStream("c.png")); 

// Read from absolute path 
ImageIO.read(new File("E:\\SOFTWARE\\TrainPIS\\res\\drawable\\c.png")); 

// Read from images folder parallel to src in your project 
ImageIO.read(new File("images\\c.jpg")); 
0

也許有些不妥當u加載在BuggeredImage圖像。他是我的測試代碼。

BufferedImage image = null; 
     try { 
      image = ImageIO.read(new File("/home/adrian/Documents/wave.png")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("Height: " +image.getHeight()+ " Width: " +image.getWidth()); 

這是輸出:

Height: 1170 Width: 2576 
BUILD SUCCESSFUL (total time: 0 seconds) 

向我們展示如何ü獲得myImgByteArray,所以我們可以看到,如果有錯誤之前。

+0

'BuggeredImage' - 哈哈,這是故意的嗎?^_ ^(如果加載圖像時出現錯誤,確實是錯誤的) – Thomas

0

你可以嘗試這樣的:

public LoadImageApp() { 
    try { 
     img = ImageIO.read(new File("/workspace/ImageProject/src/myPic.png")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

public Dimension getPreferredSize() { 
    if (img == null) { 
     return new Dimension(100,100); 
    } else { 
     System.out.println("Height: " +img.getHeight()+ " Width: " +img.getWidth());   
     return new Dimension(img.getWidth(null), img.getHeight(null)); 
    } 
} 

確保您正確地調用文件的位置!在Linux中的路徑必須是格式爲: /path/to/my/file.png 而在Windows中,這是文件路徑: C:\\workspace\\path\to\myFile.png

+0

抱歉沒有工作。仍然得到相同的錯誤。 – rickygrimes

+0

請閱讀此處的示例:http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/2d/images/examples/LoadImageApp.java –