Я пытаюсь прочитать размеры изображения 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());
Может кто-нибудь, пожалуйста, предложите, что мне нужно сделать, чтобы исправить это?
Вы можете попробовать следующее:
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
Вы можете использовать другой способ получения размеров изображения:
BufferedImage image = javax.imageio.ImageIO.read(new File(imageFilePath));
System.out.println(image.getHeight());
System.out.println(image.getWidth());
Возможно, что-то не так, когда вы загружаете изображение в 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, чтобы мы могли видеть, есть ли ошибка раньше.
BuggeredImage
- BuggeredImage
, это было специально? ^ _ ^ (если при загрузке изображения что-то не так, оно действительно содержит ошибки)
Это зависит от того, как вы 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"));
ImageIO
с действительными данными PNG? Вы пытались открыть файл в каком-либо программном обеспечении обработки изображений и позволитьImageIO
читать его напрямую, а не предоставлять поток?