2013-07-19 8 views
7

के साथ imgscalr मैं कुछ छवियों का आकार बदलने के लिए पुस्तकालयों (org.imgscalr.Scalr) का उपयोग कर रहा हूं, लेकिन जब पृष्ठभूमि का आकार बदलने के बाद लाल हो जाता है। मेरा कोड है:पृष्ठभूमि लाल

BufferedImage imagemPng = ImageIO.read(image); 
BufferedImage imagemJpg = Scalr.resize(imagemPng, Method.QUALITY, 1920, 937); 

क्या आप मेरी मदद कर सकते हैं?

धन्यवाद

+0

आपने पूरी तरह से इस प्रश्न से पूछा। –

+0

शायद 'png' से' jpg' तक पारदर्शी पृष्ठभूमि के साथ करना है। –

+0

क्या रंगीन पृष्ठभूमि सेट करने के लिए कुछ है? –

उत्तर

18

कोड आप छोड़े गए (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 लाइब्रेरी में जोड़कर जावा छवियों के साथ इन छोटे कष्टप्रद गॉचा को संबोधित करने का मतलब रहा हूं ताकि आप केवल फाइल लोड कर सकें और उन्हें बचा सकें और इन नुकीले किरकिरा विवरणों के बारे में चिंता न करें।

+0

आप इस मुद्दे में विशेषज्ञ हैं। समस्या तब थी जब मैंने छवि को पीएनजी से जेपीजी में परिवर्तित कर दिया, लेकिन अब समस्या हल हो गई थी। मैंने इस गलती के साथ बहुत कुछ सीखा। आपको बहुत बहुत धन्यवाद !!! –

+0

अधिक स्वागत है, मुझे खुशी है कि मैं मदद कर सकता हूं! –

+0

HI @ रियादकाल्ला, मुझे एक समान समस्या का सामना करना पड़ रहा है। मैंने मूल छवि पर अल्फा चैनल की जांच करके इसे डिबग करने का प्रयास किया, लेकिन यह हमेशा झूठा लौटाता है। मेरे पास एक ही जावा और ओएस के साथ दो सर्वरों पर तैनात एक ही एप्लीकेशन है और एक एप्लिकेशन हमेशा रंगीन पृष्ठभूमि उत्पन्न करता है और दूसरा सही आकार वाली छवि का उत्पादन करता है।जब मैं टोमकैट को पुनरारंभ करता हूं तो यह समस्या को हल करता है। यह समझने में मेरे लिए वास्तव में मुश्किल हो रही है कि यह क्यों हो रहा है। यदि आप संभव हो तो कोई अंतर्दृष्टि प्रदान कर सकते हैं। धन्यवाद। –

संबंधित मुद्दे