2009-04-01 10 views
14

छवि प्रकार (बीएमपी, जेपीजी, पीएनजी, आदि) से स्वतंत्र तरीके से छवि का आकार बदलना संभव है? कैसे मैं आनुपातिक एक jpeg छवि का आकार बदल सकते.NET में किसी भी प्रकार की आनुपातिक आकार बदलने की छवि कैसे करें?

public bool ResizeImage(string fileName, string imgFileName, 
    ImageFormat format, int width, int height) 
{ 
    try 
    { 
     using (Image img = Image.FromFile(fileName)) 
     { 
      Image thumbNail = new Bitmap(width, height, img.PixelFormat); 
      Graphics g = Graphics.FromImage(thumbNail); 
      g.CompositingQuality = CompositingQuality.HighQuality; 
      g.SmoothingMode = SmoothingMode.HighQuality; 
      g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      Rectangle rect = new Rectangle(0, 0, width, height); 
      g.DrawImage(img, rect); 
      thumbNail.Save(imgFileName, format); 
     } 
     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 

संभव नहीं है, तो:

मैं इस कोड है और पता है कि कुछ याद आ रही है (लेकिन क्या पता नहीं है)?

मुझे पता है कि this method का उपयोग करके, लेकिन यह नहीं पता कि यह कहां रखा जाए (!)।

+5

8-बिट PNG और GIF चित्र की आवश्यकता होती है फिर से परिमाणीकरण और फिर से कटौती आकार बदलने पर किया जा रहा है (जो गैर तुच्छ है!)। सबसे अच्छा समाधान एक प्रबंधित लाइब्रेरी का उपयोग करना है जिसे सभी स्वरूप/किनारे के मामलों को सही तरीके से संभालने, पहलू अनुपात बनाए रखने आदि के लिए डिज़ाइन किया गया है। [ImageResizer लाइब्रेरी] (http://imageresizingin.net/) इस कार्य के लिए एक सिद्ध उपकरण है साथ ही फसल, घूर्णन, और flipping। यह ओपन-सोर्स है, इसलिए यदि आप अपना खुद का समाधान रोलिंग करना चाहते हैं, तो बस कॉपी और पेस्ट करें। यह प्लगइन के माध्यम से कई अन्य उपयोगी चीजों को भी अनुमति देता है, जैसे वॉटरमार्किंग, डिस्क कैशिंग, एसक्यूएल ब्लब्स, एस 3 रीडिंग इत्यादि। –

+0

मेरे घर के उगाए गए छवि रेजिज़र को बेहतर बनाने के लिए यहां आया और ImageResizer लाइब्रेरी की खोज की। उत्कृष्ट है। कंप्यूटर भाषाविद् के लिए +1! – Chris

+1

उपरोक्त कंप्यूटर भाषाविद् के उत्तर में यूआरएल होना चाहिए: http://imageresizing.net/ – glenatron

उत्तर

16

सबसे पहले और सबसे महत्वपूर्ण, आप छवि की वर्तमान ऊंचाई और चौड़ाई को पकड़ नहीं रहे हैं। आनुपातिक रूप से आकार बदलने के लिए आपको छवि की वर्तमान ऊंचाई/चौड़ाई को पकड़ने और उसके आधार पर आकार बदलने की आवश्यकता होगी।

वहां से, उस पर आधारित सबसे बड़ी विशेषता और अनुपात का आकार बदलें।

उदाहरण के लिए, मान लें कि वर्तमान छवि 800 x 600 है और आप 400 x 400 स्पेस के अनुपात में आनुपातिक रूप से आकार बदलना चाहते हैं। सबसे बड़ा अनुपात (800) प्राप्त करें और इसे नए आकार के अनुपात में खोजें। 800 -> 400 = .5 अब उस अनुपात को लें और दूसरे आयाम (600 * .5 = 300) से गुणा करें।

आपका नया आकार 400 x 300 यहाँ है एक PHP उदाहरण है (खेद .... आप इसे हालांकि मिल जाएगा)

$thumb_width = 400; 
$thumb_height = 400; 

$orig_w=imagesx($src_img); 
$orig_h=imagesy($src_img);  

if ($orig_w>$orig_h){//find the greater proportion 
    $ratio=$thumb_width/$orig_w; 
    $thumb_height=$orig_h*$ratio; 
}else{ 
    $ratio=$thumb_height/$orig_h; 
    $thumb_width=$orig_w*$ratio; 
} 
9

मुझे लगता है कि अपने कोड ठीक है, लेकिन चौड़ाई में ले रही है और पैरामीटर के रूप में ऊंचाई है जहां आप मेरी राय में गलत हो रहे हैं। इस विधि के कॉलर को यह तय करना होगा कि वे चौड़ाई और ऊंचाई कितनी बड़ी चाहें? मैं एक प्रतिशत करने के लिए इसे बदलने का सुझाव होगा:

public bool ResizeImage(string fileName, string imgFileName, 
    ImageFormat format, int percent) 
{ 
    try 
    { 
     using (Image img = Image.FromFile(fileName)) 
     { 
      int width = img.Width * (percent * .01); 
      int height = img.Height * (percent * .01); 
      Image thumbNail = new Bitmap(width, height, img.PixelFormat); 
      Graphics g = Graphics.FromImage(thumbNail); 
      g.CompositingQuality = CompositingQuality.HighQuality; 
      g.SmoothingMode = SmoothingMode.HighQuality; 
      g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      Rectangle rect = new Rectangle(0, 0, width, height); 
      g.DrawImage(img, rect); 
      thumbNail.Save(imgFileName, format); 
     } 
     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 
+6

कॉलर के लिए यह सटीक आयाम पता होना चाहिए कि वे छवि चाहते हैं कि सटीक आयाम ... उदाहरण के लिए, यदि मेरे पास कोई छवि है वह 1024X768 है और मैं इसे थंबनेल के लिए 50X50 तक घटा सकता हूं, मुझे प्रतिशत की गणना करने की आवश्यकता नहीं है। निजी तौर पर, मैं चौड़ाई/ऊंचाई पर मानकीकृत करता हूं और प्रतिशत अधिभार प्रदान करता हूं जो अंततः चौड़ाई/ऊंचाई संस्करण को कॉल करता है। दोनों के सर्वश्रेष्ठ और बहुत सारे कोड नहीं। – ctorx

+0

मुझे पता है कि यह एक पुरानी टिप्पणी है लेकिन .. मैं व्यक्तिगत रूप से चौड़ाई या ऊंचाई को बाधा के रूप में प्रदान करता हूं और पहलू राशन को बनाए रखता हूं ताकि छवियों को सभी विकृत न हो। आप यह भी चाहते हैं कि यह सबसे बड़ा किनारा 50 का आकार बदलना चाहे चाहे वह ऊंचाई या चौड़ाई हो। –

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