出於某種原因,使用ImageBuffer和ImageIO打開一些PNG文件不起作用。下面是一些代碼,我使用的是調整大小/裁切JPG格式正常工作:如何讓java的ImageBuffer正確讀取PNG文件?
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)
解決方案?
是否還有其他庫可以使用?
您在Linux中使用哪種JVM? (編輯:由堆棧跟蹤中的'sun.reflect'判斷,這是Sun的,但只是可以肯定) – 2011-04-29 20:28:00
是的,最新的sun jvm。 1.6_24 – egervari 2011-04-29 20:48:49
嗯,我修好了。我把黑客放在那裏,如果image.getType()== 0,我手動將它設置爲5.這有效。 – egervari 2011-04-29 21:00:32