Ошибка при чтении размеров изображения PNG

1

Я пытаюсь прочитать размеры изображения 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
    Вы уверены, что используете ImageIO с действительными данными PNG? Вы пытались открыть файл в каком-либо программном обеспечении обработки изображений и позволить ImageIO читать его напрямую, а не предоставлять поток?
  • 0
    Да, я так и сделал. Я попытался прочитать файл, записав изображение в выходной поток. Изображение отображается правильно. Видите проблему только при чтении размеров.
Теги:

4 ответа

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
    Извините, не сработало. Тем не менее получить ту же ошибку.
  • 0
    Пожалуйста, прочитайте пример здесь: docs.oracle.com/javase/tutorial/displayCode.html?code=http://…
0

Вы можете использовать другой способ получения размеров изображения:

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

Возможно, что-то не так, когда вы загружаете изображение в 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)

Покажите нам, как u получить myImgByteArray, чтобы мы могли видеть, есть ли ошибка раньше.

  • 0
    BuggeredImage - BuggeredImage , это было специально? ^ _ ^ (если при загрузке изображения что-то не так, оно действительно содержит ошибки)
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"));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню