2008-10-21 21 views
23

मैं वर्तमान में एक ऐसी प्रणाली लिख रहा हूं जो क्लाउड स्टोरेज में स्थानांतरित होने वाली विरासत छवि लाइब्रेरी में संग्रहीत लगभग 140,000 आईएसएच छवियों के लिए मेटा डेटा संग्रहीत करता है। मैं जेपीजी डेटा"System.Drawing.Image" का फ़ाइल आकार कैसे प्राप्त करें

System.Drawing.Image image = System.Drawing.Image.FromFile("filePath"); 

इम काफी छवि हेरफेर करने के लिए नए प्राप्त करने के लिए ... निम्नलिखित का उपयोग कर रहा है, लेकिन इस चौड़ाई, ऊंचाई, पहलू अनुपात आदि लेकिन क्या मैं बाहर काम नहीं कर सकता है कि कैसे है की तरह साधारण मूल्यों प्राप्त करने के लिए ठीक है बाइट्स में व्यक्त jpg के भौतिक फ़ाइल आकार को पुनर्प्राप्त करने के लिए। कोई भी सहायताकाफी प्रशंसनीय होगी।

धन्यवाद

बाद में तुलना

System.Drawing.Image image = System.Drawing.Image.FromFile(filePath); 

if (image != null) 
{ 
    int width = image.Width; 
    int height = image.Height; 
    decimal aspectRatio = width > height ? decimal.divide(width, height) : decimal.divide(height, width); 
    int fileSize = (int)new System.IO.FileInfo(filePath).Length; 

    using (System.IO.MemoryStream stream = new System.IO.MemoryStream(fileSize)) 
    { 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); 
    Byte[] imageBytes = stream.GetBuffer(); 
    System.Security.Cryptography.MD5CryptoServiceProvider provider = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
    Byte[] hash = provider.ComputeHash(imageBytes); 

    System.Text.StringBuilder hashBuilder = new System.Text.StringBuilder(); 

    for (int i = 0; i < hash.Length; i++) 
    { 
     hashBuilder.Append(hash[i].ToString("X2")); 
    } 

    string md5 = hashBuilder.ToString(); 
    } 

    image.Dispose(); 

} 

उत्तर

43

के लिए छवि का एक MD5 हैश सहित अंतिम समाधान आप फ़ाइल से सीधे अपने छवि प्राप्त हैं, तो आप में मूल फ़ाइल के आकार पाने के लिए निम्नलिखित कोड का उपयोग कर सकते बाइट्स।

var fileLength = new FileInfo(filePath).Length; 

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

long jpegByteSize; 
using (var ms = new MemoryStream(estimatedLength)) // estimatedLength can be original fileLength 
{ 
    image.Save(ms, ImageFormat.Jpeg); // save image to stream in Jpeg format 
    jpegByteSize = ms.Length; 
} 
1

System.Drawing.Image आप आकार की फ़ाइल लंबाई नहीं देंगे: इस मामले में, आप करने के लिए छवि को बचाने के लिए MemoryStream का उपयोग कर सकते हैं। इसके लिए आपको दूसरी लाइब्रेरी का उपयोग करना होगा।

int len = (new System.IO.FileInfo(sFullPath)).Length; 
2

यदि आपके पास मूल फ़ाइल नहीं है, तो फ़ाइल का आकार स्पष्ट नहीं है क्योंकि यह छवि प्रारूप और गुणवत्ता पर निर्भर करता है। तो आपको क्या करना होगा छवि को एक स्ट्रीम (उदा। मेमोरीस्ट्रीम) पर लिखें और फिर स्ट्रीम के आकार का उपयोग करें।

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