Как сделать так, чтобы ImageBuffer java правильно читал файл PNG?

По какой-то причине открытие некоторых файлов PNG с помощью ImageBuffer и ImageIO не работает. Вот код, который я я использую это отлично работает для изменения размера / обрезки JPG:

BufferedImage image = ImageIO.read(new File(location));

BufferedImage croppedImage = image.getSubimage(
    cropInfo.getX(), cropInfo.getY(), cropInfo.getW(), cropInfo.getH());

BufferedImage resizedImage = new BufferedImage(
    TARGET_WIDTH, TARGET_HEIGHT, croppedImage.getType());
Graphics2D g = resizedImage.createGraphics();
g.drawImage(croppedImage, 0, 0, TARGET_WIDTH, TARGET_HEIGHT, null);
g.dispose();

this.changeContentType("image/png", ".png"); // not really relevant. just a property

ImageIO.write(resizedImage, "png", new File(location));

return resizedImage;

Цель этой функции - взять любой заданный тип, изменить размер и обрезать изображение, а затем сохранить его в PNG с тем же именем файла.

Это работает в Windows, но если я кадрирую / изменяю размер в Linux ( lenny), он вообще вылетает и жалуется на тип файла (он говорит, что тип равен 0).

java.lang.IllegalArgumentException: Unknown image type 0
    java.awt.image.BufferedImage.<init>(BufferedImage.java:490)
    trainingdividend.domain.file.ServerImage.resizeImage(ServerImage.java:68)
    trainingdividend.domain.file.ServerImage.cropAndResize(ServerImage.java:80)
    trainingdividend.service.user.UserAccountManagerImpl.cropAvatar(UserAccountManagerImpl.java:155)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

Решения?

Есть ли еще одна библиотека, которую я могу использовать вообще?

9
задан egervari 29 April 2011 в 09:25
поделиться