किसी कारण से, ImageBuffer और ImageIO का उपयोग करके कुछ पीएनजी फ़ाइलों को खोलना काम नहीं करता है। यहाँ है कि आकार बदलने/फसल JPGs के लिए ठीक काम करता है कुछ कोड मैं का उपयोग कर रहा है:मैं पीएनजी फ़ाइल को सही तरीके से पढ़ने के लिए जावा की छविबफर कैसे बना सकता हूं?
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 में सहेज है फ़ाइल का नाम।
यह विंडोज पर काम करता है, लेकिन अगर मैं लिनक्स (लेन) पर फसल/आकार बदलता हूं, तो यह पूरी तरह से दुर्घटनाग्रस्त हो जाता है और फ़ाइल के प्रकार के बारे में शिकायत करता है (यह कहता है कि प्रकार 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)
समाधान?
क्या कोई अन्य लाइब्रेरी है जिसका मैं पूरी तरह से उपयोग कर सकता हूं?
लिनक्स में आप किस जेवीएम का उपयोग कर रहे हैं? (संपादित करें: स्टैक ट्रेस में 'sun.reflect' द्वारा निर्णय लेना, यह सूर्य है, लेकिन केवल यह सुनिश्चित करने के लिए) –
हां, नवीनतम सूर्य जेवीएम। 1.6_24 – egervari
ठीक है मैंने इसे ठीक किया है। मैंने वहां एक हैक लगाया है, जहां image.getType() == 0, मैन्युअल रूप से इसे 5 पर सेट करता है। यह काम करता है। – egervari