कोड आप छोड़े गए (ImageIO बचाने के लिए) और के शेष अगर पीएनजी आप में पढ़ रहे एक पारदर्शी चैनल या नहीं है (जैसा कि @Daft पंक ने बताया) महत्वपूर्ण बिट्स यहाँ हैं।
मैं $ 1 शर्त लगाने के लिए तैयार हूं कि आपके पीएनजी में अल्फा चैनल है और जेपीजी अल्फा का समर्थन नहीं करता है; दुर्भाग्य से जावा के जेपीजी एन्कोडर को आपके द्वारा पास किए गए बुफर्ड इमेज पर अल्फा चैनल को अनदेखा करने के बारे में पता नहीं है और यह उन रंगीन चैनलों में से एक के बजाय अल्फा मानों को लिखने के पक्ष में वास्तविक रंग चैनलों (आर/जी/बी) में से एक को त्याग देगा ।
उदाहरण के लिए, यदि आपके पास:
ARGB
जावा जेपीजी एनकोडर निम्नलिखित 3 चैनलों बाहर लिखेंगे सोच वे आरजीबी हैं:
[ARG]
और नीले चैनल त्यागें।
सौभाग्य से, फिक्स मृत सरल है। बस इतना की तरह प्रकार TYPE_INT_RGB की एक नई BufferedImage बनाने: अब
Graphics g = imageToSave.getGraphics();
g.drawImage(imagemJpg, 0, 0, null);
आप कर सकते हैं:
BufferedImage imageToSave = new BufferedImage(imagemJpg.getWidth(), imagemJpg.getHeight(), BufferedImage.TYPE_INT_RGB);
तो आप इसके लिए एक अल्फा चैनल के साथ BufferedImage "प्रस्तुत करना" करने के लिए, अल्फा चैनल पट्टी की जरूरत है परिणामी छवि को बचाने के लिए छवि जेपीजी के रूप में सहेजें और यह ठीक लगेगा।
टिप: मत भूलना, यदि आप जिस तरह से छवि दिखता है (अस्पष्ट, artifacted, आदि) पसंद नहीं है आप तर्क जावा जेपीजी एनकोडर के लिए सीधे पारित करने के लिए यह बताने के लिए इतना सेक नहीं करने की आवश्यकता है बहुत (read this) - यह शायद ही कभी एक मुद्दा है, लेकिन यह अतीत में आया है जब लोग कहते हैं "imgscalr खराब दिखता है!" - BufferedImage वास्तव में अच्छा और तेज है, लेकिन जावा एन्कोडर परिणाम आक्रामक रूप से संकुचित है।
मैं कुछ छोटे आईओ हेल्पर्स को imgscalr लाइब्रेरी में जोड़कर जावा छवियों के साथ इन छोटे कष्टप्रद गॉचा को संबोधित करने का मतलब रहा हूं ताकि आप केवल फाइल लोड कर सकें और उन्हें बचा सकें और इन नुकीले किरकिरा विवरणों के बारे में चिंता न करें।
स्रोत
2013-07-23 05:22:53
आपने पूरी तरह से इस प्रश्न से पूछा। –
शायद 'png' से' jpg' तक पारदर्शी पृष्ठभूमि के साथ करना है। –
क्या रंगीन पृष्ठभूमि सेट करने के लिए कुछ है? –