2010-08-31 18 views
5

के साथ छवि प्रारूप को परिवर्तित करें मैं एक वेब एप्लिकेशन लिख रहा हूं जो उपयोगकर्ता को कई प्रारूपों (जैसे पीएनजी, जेपीजी, बीएमपी) में छवियों को अपलोड करने देता है। छवि अपलोड होने के बाद सिस्टम को इसे "पीएनजी" में परिवर्तित करना चाहिए और इसे पूर्वनिर्धारित संकल्प में स्केल करना चाहिए।जावा कम स्मृति पदचिह्न

javax.imageio.ImageIO.write(im, type, baos); 

यहाँ जहां समस्या शुरू है:

छवि मैं काम विधि का उपयोग बदलने के लिए। छवि javax.imageio.ImageIO.write का पहला तर्क RenderedImage है। जावा डॉक का कहना है कि केवल ज्ञात कार्यान्वयन BufferedImage है।

मैं java.awt.Image को BufferedImage में कनवर्ट करने का कोई तरीका खोजने का प्रयास करता हूं, लेकिन ऐसा लगता है कि यह संभव नहीं है। हालांकि, यह draw an image on a BufferedImage संभव है।

समस्या यह है कि हर बार एक नया BufferedImage बनाना बहुत मेमोरी महंगा है। मैं BufferedImage का एक पूल बनाना शुरू कर सकता हूं लेकिन मैं चालाक/समाचार विचारों की तलाश में हूं।

उत्तर

0

आप BufferedImage के कार्यान्वयन को देख सकते हैं और अपना स्वयं का कार्यान्वयन कर सकते हैं (शायद एक फ़ाइल-आधारित कार्यान्वयन?)। ये कक्षाएं आम तौर पर पढ़ने के लिए बहुत सीधे आगे होती हैं, अक्सर 50-70% टिप्पणियां और स्पष्ट रूप से लिखी जाती हैं।

वे स्रोत देते हैं, क्यों नहीं 'em?

1

इस बारे में जावा पुस्तकालयों और एसओ पोस्ट का एक गुच्छा है। क्या आपने उन्हें जांच लिया?

+1

नहीं की तरह प्रदान करता है, मैं जांच नहीं उन्हें। क्या आपके पास इस समस्या के लिए कोई सिफारिश है। मेरा मतलब है, कम स्मृति पदचिह्न –

+0

के साथ छवियों को परिवर्तित करना, क्षमा करें, मैंने उनमें से किसी का भी उपयोग नहीं किया है, इसलिए मैं कुछ भी सिफारिश नहीं कर सकता। आप शायद Google या whereever पर कुछ परिणाम पा सकते हैं, लेकिन आपकी सबसे अच्छी शर्त सिर्फ उन्हें स्वयं ही कोशिश करनी है। –

1

आप बार बार एक बफ़र छवि का पुन: उपयोग कर सकता है, आकार के subimage का उपयोग कर उचित रूप से जब यह ImageIO.write उपयोग करने के लिए समय आ गया है विधि

+0

अहप, यह मूल विचार था (जैसा कि प्रश्न वर्णन करता है) –

0

netpbm या imagemagick जैसे देशी कनवर्टर लॉन्च करें।

5

Thumbnailator पुस्तकालय का प्रयास करें: http://code.google.com/p/thumbnailator/

उदाहरण कोड:

Thumbnails.of("large-picture.jpg") 
     .scale(1.0) 
     .outputFormat("png") 
     .toOutputStream(os); 

लाइब्रेरी भी बहुत कुछ स्केलिंग, आकार, फसल, घूर्णन, वॉटरमार्किंग आदि

+0

यह एक अच्छी लाइब्रेरी है, लेकिन यह बुफर्ड इमेज का भी उपयोग करता है। क्या ऐसे दृष्टिकोण हैं जो BufferedImage का उपयोग नहीं करते हैं? – user2910265

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