2013-04-23 6 views
14

से बड़ा आकार का आकार बनाना, मैं कैमरे से पीएनजी प्रारूप में छवि को छोटे आकार में बनाने के लिए छवि को संकुचित करना चाहता हूं, इसलिए मैं इसका उपयोग कर रहा हूं कोड:bitmap.compress (Bitmap.CompressFormat.PNG, 0, fut) मूल आकार

compressedPictureFile = new File(imagePath); 
Bitmap bitmap = BitmapFactory.decodeFile(imagePath); 
FileOutputStream fOut = new FileOutputStream(compressedPictureFile); 
boolean compressed = bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut); 
fOut.flush(); 
fOut.close(); 

समस्या यह है कि compressedPictureFile वास्तव में बड़ी है कि मूल छवि (1 एमबी से 6MB करने के लिए)

मैं क्या याद आ रही है क्या है? और क्या यह छवि के आकार को कम करने का सबसे अच्छा तरीका है?

धन्यवाद

उत्तर

21

कैमरे से ली गई छवियों सबसे अधिक संभावना jpg -format, जो हानिपूर्ण में जमा हो जाती है, लेकिन रंग के बहुत सारे है (जैसे फ़ोटोग्राफ़ के रूप में) के साथ छवियों के लिए अपेक्षाकृत अच्छा है।

जब आप अपनी विधि का उपयोग करके बिटमैप को संपीड़ित करते हैं तो आप इसे png के रूप में सहेजते हैं। पीएनजी संपीड़न हानि रहित है, लेकिन कुछ रंग हैं (जैसे कि कुछ लोगोप्रवाह या अन्य ग्राफिक्स में) बहुत छोटी फाइलें प्राप्त कर सकते हैं। जब एक पीएनजी फ़ाइल में रंगों और जटिलता की मात्रा बढ़ जाती है, तो फाइल का आकार भी होगा (यही कारण है कि कैमरा एक jpg बचाता है - गुणवत्ता/फाइलसाइज अनुपात अधिकांश तस्वीरों के लिए पीएनजी से काफी बेहतर है)।

तो, यदि आप तस्वीरों के फाइलसाइज को कम करना चाहते हैं, तो गुणवत्ता-पैरामीटर के साथ जेपीजी संपीड़न और प्रयोग का उपयोग करें। आप छवियों के संकल्प को भी कम करना चाहते हैं, क्योंकि यह बहुत सी जगह बचाएगा (50% रिज़ॉल्यूशन वाली फ़ाइल डेटा आकार में लगभग 25% होगी)।

+0

पर ठीक से काम की गुणवत्ता पैरामीटर संकल्प के रूप में ही है? मैं संकल्प कैसे कम कर सकता हूं? –

+1

'गुणवत्ता'-पैरामीटर प्रभावित करता है कि जेपीजी-संपीड़न का उपयोग करते समय रंग कितने अच्छी तरह संरक्षित होंगे। पीएनजी आउटपुट करते समय इसका कोई प्रभाव नहीं पड़ता है। आप यहां 'संपीड़न' विधि के बारे में कुछ पढ़ सकते हैं: http://developer.android.com/reference/android/graphics/Bitmap.html#compress%28android.graphics.Bitmap.CompressFormat,%20int,%20java .io.OutputStream% 29 – Jave

+1

वहां छवि आकार घटाने पर कई ट्यूटोरियल हैं, लेकिन सबसे आसान तरीका है कि 'बिटमैप.क्रेटस्केल्ड बिटमैप' के माध्यम से बस एक नया, छोटा बिटमैप बनाएं: http://developer.android.com/reference/ एंड्रॉइड/ग्राफिक्स/बिटमैप.html # createScaledBitmap% 28android.graphics.Bitmap,% 20int,% 20int,% 20boolean% 29 – Jave

0

यह मेरे ऐप

public static String makeScreen(View view) throws Exception { 
    String filename = "file.png"; 
    view.setDrawingCacheEnabled(true); 
    view.buildDrawingCache(); 
    Bitmap b = view.getDrawingCache(); 
    FileOutputStream file = null; 

    try { 
     file = new FileOutputStream(Environment.getExternalStorageDirectory().toString() + "folder/" + filename); 
     if (file != null) { 
      b.compress(Bitmap.CompressFormat.PNG, 98, file); 
      file.close(); 
     } 
     view.destroyDrawingCache(); 
    } catch (Exception e) { view.destroyDrawingCache(); } 
} 
संबंधित मुद्दे