2010-01-19 7 views
15

मैं एक तस्वीर को एक विशिष्ट फ़ाइल आकार में आकार बदलना चाहता हूं। उदाहरण के लिए, 200KB से अधिक नहीं। सी # .NET के साथ इसे प्राप्त करने का सबसे अच्छा तरीका क्या है?किसी चित्र को किसी विशिष्ट फ़ाइल आकार में कैसे आकार बदलें?

धन्यवाद!

+0

क्या स्वरूप? पीएनजी? जेपीईजी? –

+1

"सर्वश्रेष्ठ" परिभाषित करें: सबसे तेज़, सर्वोत्तम दृश्य गुणवत्ता, स्मृति का न्यूनतम उपयोग, सीपीयू का न्यूनतम उपयोग? – RedFilter

+0

जेपीईजी प्रारूप (क्या यह वास्तव में अन्य प्रारूपों के साथ अलग है?)। "सर्वश्रेष्ठ" -> 1. सबसे अच्छा दृश्य गुणवत्ता 2. सबसे तेजी से –

उत्तर

3

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

+1

कई तरीके है जिसके असंतोषजनक परिणाम प्राप्त करने के बाद, मैं चौड़ाई और ऊंचाई :) –

1

आप छवि का आकार बदलने के लिए Drawing.Image कक्षा के साथ काफी कुछ कर सकते हैं।

ऐसा करने के तरीके पर कई सवाल हैं। यहां one है।

आकार के संदर्भ में - आपको पता नहीं चलेगा कि आकार बदलने के बाद आकार क्या है। निश्चित होने का एकमात्र तरीका आकार बदलना है, परिणाम की जांच करें और यदि यह बहुत बड़ी है तो निम्न गुणवत्ता के साथ आकार बदलने का प्रयास करें। पूरा होने तक दोहराएं।

this (समान?) प्रश्न के उत्तर में वर्णित अनुसार आप आयाम और रंग गहराई को जानते हैं, तो आप आकार का अनुमान लगा सकते हैं।

+0

यह करने के लिए एक गूंगा रास्ता की तरह लगता है, एक compsci दृष्टिकोण से विवश करने का फैसला किया। – MSalters

+0

@MSalters आप भविष्य की भविष्यवाणी करने के बारे में कैसे करेंगे, एक कॉम्पसी तरीके से, वह है? – Oded

+0

स्टार्टर्स के लिए, यह एक तरफा क्रमिक अनुमानित एल्गोरिदम है (बहुत कम आउटपुट/खराब गुणवत्ता के लिए कोई जांच नहीं है)।इसलिए यह धीमा या overshoot के अधीन है। दूसरी समस्या यह है कि यदि आप अपने पहले प्रयास पर लक्ष्य नहीं डालते हैं, तो आपको सबकुछ फिर से करना होगा। – MSalters

2
+0

कूल, आयामों के आधार पर फाइलसाइज़ का आकलन करने के लिए कुछ अच्छे उदाहरण हैं। – grenade

+0

यह सीधा जवाब यह मेरे लिए काम करता है http://stackoverflow.com/a/24867798/184572 –

1

देखें तो यह एक बहुत ही महत्वपूर्ण कार्य है, परीक्षण नहीं है और त्रुटि काफी अच्छी तरह से काम करता है। बस लगता है कि अगर आप N * 100% के लिए इनपुट हटना करने की जरूरत है, तो आप sqrt(N) * 100% द्वारा दोनों आयामों स्केलिंग द्वारा करते हैं।

यदि यह महत्वपूर्ण है, तो आपको छवि संपीड़न प्रौद्योगिकियों को बेहतर ढंग से समझने की आवश्यकता है। मैं जेपीजी मानूंगा। यह एक छवि प्रारूप है जो छवि को 8x8 पिक्सेल ब्लॉक में विभाजित करके हानिकारक संपीड़न प्राप्त करता है, डीएफटी उन्हें बदलता है, छोटे गुणांक को फेंक देता है, और उसके परिणामस्वरूप बिटस्ट्रीम को संपीड़ित करता है।

अब यह निम्नानुसार है कि आप गुणवत्ता स्तर के साथ काफी कुछ खराब कर सकते हैं, आप कितने छोटे गुणांक फेंकते हैं। इसके लिए आपको (महंगे) डीएफटी को फिर से करने की आवश्यकता नहीं है। तो अगर फ़ाइल थोड़ी बड़ी हो जाती है, तो आप कुछ और गुणांक फेंक सकते हैं और पुनः कंप्रेस कर सकते हैं। और यदि आप थोड़ा आक्रामक थे, तो कुछ कोफिएंटेंट वापस रखें और फिर से संपीड़ित करें। यह सब काफी तेज़ है।

-1

एक मोटे अनुमान इस प्रकार है:

size(KB) = (width * height * bitdepth)/(8 * 1024)

फ़ाइल आकार में थोड़ा और अधिक जानकारी (संपीड़न की जानकारी, आदि) दायर की वजह से फुलाया जाता है।

+0

-1 यह किस फ़ाइल प्रकार पर लागू होता है? आप इस सूत्र में कैसे आए? –

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