2010-03-25 14 views
7

से जेपीईजी का छवि आकार प्राप्त करना मेरे पास छवियों के आकार के साथ बहुत सी जेपीईजी फाइलें हैं। उदाहरण के लिए, यहाँ पहली बार 640 बाइट्स आकार की एक छवि की hexdump द्वारा दिए गए के रूप में 256 * 384 (पिक्सेल) है:अपनी बाइनरी

0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0048 ......JFIF.....H 
0000010: 0048 0000 ffdb 0043 0003 0202 0302 0203 .H.....C........ 
0000020: 0303 0304 0303 0405 0805 0504 0405 0a07 ................ 
0000030: 0706 080c 0a0c 0c0b 0a0b 0b0d 0e12 100d ................ 

मुझे लगता है कि आकार जानकारी mus इन पंक्तियों के भीतर हो। लेकिन यह देखने में असमर्थ है कि कौन से बाइट आकार सही तरीके से देते हैं। क्या कोई मुझे उन फ़ील्ड को ढूंढने में सहायता कर सकता है जिनमें आकार की जानकारी है?

उत्तर

10

JPEG page on wikipedia के अनुभाग के अनुसार, छवि की चौड़ाई और ऊंचाई छवि में ही संग्रहीत नहीं लगती है - या, कम से कम, ऐसा नहीं है जो खोजने में काफी आसान है।


फिर भी, JPEG image compression FAQ, part 1/2 से उद्धृत:

विषय: [22] कैसे कर सकता है एक JPEG फ़ाइल से मेरा कार्यक्रम निकालने छवि आयाम?

जेपीईजी फ़ाइल के शीर्षलेख में "मार्कर" नामक ब्लॉक की एक श्रृंखला शामिल है। छवि की ऊंचाई और चौड़ाई को सॉफ़्ट( फ्रेम, प्रकार एन) के मार्कर में संग्रहीत किया जाता है।
सॉफ़्ट ढूंढने के लिए आपको पिछले मार्करों पर छोड़ना होगा; आपको अन्य प्रकार के मार्करों में का पता नहीं होना चाहिए, बस पर छोड़ने के लिए उनके लम्बे शब्दों का उपयोग करें।
न्यूनतम तर्क आवश्यक है शायद सी कोड का एक पृष्ठ।
(कुछ लोग बस बाइट जोड़ी मार्कर ब्लॉक संरचना पर ध्यान देने के बिना SOFn, का प्रतिनिधित्व करने के लिए खोज सिफारिश की है। यह असुरक्षित है क्योंकि एक पूर्व मार्कर SOFn पैटर्न शामिल हो सकता है, या तो संयोग से या क्योंकि यह एक JPEG संकुचित थंबनेल छवि शामिल हैं। आप पालन नहीं करते हैं मार्कर संरचना आप मुख्य छवि आकार के बजाय थंबनेल के आकार प्राप्त हो सकें।)
एक दरियादिली से उदाहरण टिप्पणी की सी में में पाया जा सकता आईजे में rdjpgcom.c जी वितरण (भाग 2 देखें, आइटम 15)।
पर्ल कोड http://www.tardis.ed.ac.uk/~ark/wwwis/ से wwwis में पाया जा सकता है।

(Ergh, कि लिंक टूट गया लगता है ...)


यहाँ, सी कोड के एक हिस्से को जो आपकी मदद कर सकता है, हालांकि: Decoding the width and height of a JPEG (JFIF) file

+0

यदि ऐसा है तो कैसे नॉटिलस या कोई अन्य छवि दर्शक छवि के संकल्प का निर्णय लेता है? वह भी उस छवि के लिए 256 * 384 के मान पर सहमत हैं – rajeshsr

+0

बहुत बहुत धन्यवाद! अब मैं समझ गया हूँ0xFFC0 को पकड़ना प्रतीत होता है, वैसे भी मैं वहां शामिल खतरे को समझता हूं! एक बार फिर धन्यवाद! बीटीडब्लू, यह स्टैक ओवरफ्लो पर मेरी पहली पोस्ट है! तेजता और प्रतिक्रिया की सटीकता के बारे में काफी आश्चर्यचकित। आप सभी को धन्यवाद! – rajeshsr

+0

आपका स्वागत है :-) मज़े करो! –

0

इस समारोह जेपीईजी गुण

पढ़ा जाएगा
function jpegProps(data) {   // data is an array of bytes 
    var offset = 0; 
    while(off<data.length) { 
     while(data[off]==0xff) off++; 
     var mrkr = data[off]; off++; 

     if(mrkr==0xd8) continue; // SOI 
     if(mrkr==0xd9) break;  // EOI 
     if(0xd0<=mrkr && mrkr<=0xd7) continue; 
     if(mrkr==0x01) continue; // TEM 

     var len = ((data[off]<<8)|data[off+1])-2; off+=2; 

     if(mrkr==0xc0) return { 
      bpc : data[off],  // precission (bits per channel) 
      w : (data[off+1]<<8)|data[off+2], 
      h : (data[off+3]<<8)|data[off+4], 
      cps : data[off+5] // number of color components 
     } 
     off+=len; 
    } 
} 
संबंधित मुद्दे