How can I read PNG Metadata from PHP? -
यह है जो मैंने अभी तक किया है:
& lt;? Php $ file = " 18201010338AM16390621000846.png "; $ Test = file_get_contents ($ फ़ाइल, FILE_BINARY); गूंज str_replace ("\ n", "& lt; br & gt;", $ परीक्षण); ? & Gt;
आउटपुट मैं क्या चाहता हूँ, लेकिन मुझे वाकई केवल 3-7 लाइनों की आवश्यकता है। यह अब आउटपुट जैसा दिखता है: मैं "PunkBuster स्क्रीनशॉट (±) एएओ ब्रिज क्रॉसिंग" से परिणाम "से परिणाम प्राप्त करने की कोशिश कर रहा हूं: w = 394 x h = 1 9 6 नमूना = 2"। मुझे लगता है कि यह फाइल के माध्यम से पढ़ने के लिए काफी सीधा होगा, और प्रत्येक पंक्ति को किसी सरणी में संग्रहित करेगा, [0] को "पंकबस्टर स्क्रीनशॉट (एपा) एएओ ब्रिज क्रॉसिंग" होना चाहिए, और इसी तरह। ये सभी पंक्तियों को बदलने के अधीन हैं, इसलिए मैं कुछ परिमितों की खोज नहीं कर सकता।
मैंने कुछ दिनों के लिए कोशिश की है, और यह बहुत मदद नहीं करता है कि मैं php ।
यह परिभाषित करता है कि एक PNG दस्तावेज़ को डेटा के एक से अधिक मात्रा में विभाजित किया गया है। आपको अपने इच्छित हिस्से के लिए अपनी तरफ से नेविगेट करना होगा।
जो डेटा आप निकालना चाहते हैं वह एक text
खंड में परिभाषित होने लगते हैं मैंने निम्नलिखित क्लास को लिखा है कि आप पीएनजी फाइलों से हिस्से निकालने की अनुमति दें।
वर्ग PNG_Reader {निजी $ _chunks; निजी $ _ एफपी; फ़ंक्शन __construct ($ file) {if (! File_exists ($ file)) {नया अपवाद फेंक ('फ़ाइल मौजूद नहीं है'); } $ This- & gt; _chunks = एरे (); // फ़ाइल $ को खोलें- यह- & gt; _fp = fopen ($ फ़ाइल, 'आर'); अगर (! $ This- & gt; _fp) नया अपवाद फेंक ('फ़ाइल खोलने में असमर्थ'); // जादू बाइट पढ़ें और $ header = fread ($ this- & gt; _fp, 8) सत्यापित करें; अगर ($ हेडर! = "\ X89PNG \ x0d \ x0a \ x1a \ x0a") नया अपवाद फेंकें ('मान्य पीएनजी छवि नहीं है'); विखंडू के माध्यम से // लूप बाइट 0-3 लंबाई है, बाइट 4-7 का प्रकार है $ चकहेडर = फ़्रेड ($ this- & gt; _fp, 8); जबकि ($ चक हेडर) {// एक्सट्रैक्ट लंबाई और प्रकार बाइनरी डेटा $ चक = @ कुप ('Nsize / a4type', $ चक हेडर); // आंतरिक स्थिति में स्टोर स्थिति यदि ($ this- & gt; _chunks [$ चक ['प्रकार']] === नल) $ this- & gt; _chunks [$ चक ['प्रकार']] = सरणी (); $ This- & gt; _chunks [$ ['प्रकार']] [] = सरणी ('ऑफसेट' = & gt; ftell ($ this- & gt; _fp), 'आकार' = & gt; $ चक ['आकार']) ; // अगला हिस्सा छोड़ें (शरीर और सीआरसी पर) गड़बड़ ($- >- $ fp, $ चक ['आकार'] + 4, SEEK_CUR); // अगले हिस्से का हिस्सा पढ़ना हैडर $ चकहेडर = फ़्रेड ($ this- & gt; _fp, 8); }} फ़ंक्शन __destruct () {fclose ($ this- & gt; _fp); } // ने कहा प्रकार सार्वजनिक समारोह get_chunks ($ प्रकार) के सभी भाग लौटाता है {यदि ($ this- & gt; _chunks [$ type] === नल) वापसी नल; $ विखंडू = सरणी (); विदेशी मुद्रा ($ इस- & gt; _chunks [$ प्रकार] को $ चक के रूप में) {यदि ($ चक ['आकार']> gt;) {एफसीईई ($- >- $ fp, $ चक [ऑफसेट '], SEEK_SET) ; $ विखंडू [] = फ़्रेड ($ इस- & gt; _ एफपी, $ चक ['आकार']); } और {$ विखंडू [] = ''; }} $ हिस्सा लौटाएं; }}
आप इसे अपने वांछित text / code> खंड को निकालने के लिए उपयोग कर सकते हैं:
$ file = '18201010338AM16390621000846 .png '; $ Png = नया PNG_Reader ($ फ़ाइल); $ RawTextData = $ png- & gt; प्राप्त_चुन्स ('tEXt'); $ मेटाडेटा = एरे (); विदेशी मुद्रा ($ डेटा के रूप में $ rawTextData) {$ sections = विस्फोट ("\ 0", $ डेटा); अगर ($ वर्गों & gt; 1) {$ key = array_shift ($ वर्ग); $ मेटाडाटा [$ key] = आंत ("\ 0", $ वर्ग); } और {$ मेटाडेटा [] = $ डेटा; }}
Comments
Post a Comment