2012-06-09 6 views
13

मैं सच में समझ में नहीं आता क्यों जी.डी. इस तरह की तरह लोड हो रहा है छवियों के लिए अलग अलग कार्य है:ImageCreateFromString क्यों है ImageCreateFromString?

imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif() 

जबकि वहाँ एक भी समारोह है अगर छवि स्ट्रिंग है?

$imgBlob = file_get_contents($imagePath); 
imagecreatefromstring($imageBlob); 
unset($imgBlob); //> Free memory, but I am not interested in memory consumpation 

:

imagecreatefromstring() 

वास्तव में यह, की तरह कुछ स्ट्रिंग में छवि पढ़ सकते हैं और यह कार्य करने के लिए पारित करने के लिए ज्यादा बेहतर है? या मुझे कुछ याद आ रहा है? इससे नए उपयोगकर्ताओं के लिए संभावित भ्रम पैदा हो सकता है

शायद वे सिर्फ imageCreateFromFile() फ़ंक्शन बनाने के लिए भूल गए हैं?

Ps। बेशक मैं file_get_contents विधि

+3

हम्म। उचित सवाल यह वाई के लिए PHP कोर लाइब्रेरी है .... –

+2

क्योंकि जीवन में PHP का उद्देश्य बेकार सामान से भरा हुआ है जिसे आप आसानी से अतिरिक्त लाइन के साथ कर सकते हैं। –

उत्तर

8

imagecreatefromstring() उत्तीर्ण छवि प्रकार के विरुद्ध एक स्विच चलाता है, जांचता है कि क्या आपके सिस्टम के उस छवि प्रकार के लिए समर्थन है, और फिर वास्तव में सही imagecreatefrom* फ़ंक्शन चलाता है।

आप इसे देखने के लिए स्रोत कोड देख सकते हैं: https://github.com/php/php-src/blob/master/ext/gd/gd.c?source=cc (फ़ंक्शन के लिए लाइन 2280, लाइन 2301 जहां यह छवि प्रकार पर स्विच करता है और सही फ़ंक्शन को कॉल करता है)।

तो, imagecreatefromstring() फ़ंक्शन वास्तव में केवल एक सहायक रैपर है। यदि आप वास्तविक छवि प्रकार फ़ंक्शन को कॉल करते हैं तो आपको _php_image_type (लाइन 2217) नहीं चलने से बहुत ही कम लाभ मिलेगा।

2
imagecreatefromjpeg() 
imagecreatefrompng() 
imagecreatefromgif() 

एक फ़ाइल से छवि संसाधन बनाने का उपयोग कर स्मृति consumation के बारे में कोई दिलचस्पी नहीं है - आप पैरामीटर के रूप में फ़ाइल पथ गुजरती हैं और है कि केवल स्वीकार्य इनपुट है।

imagecreatefromstring() 

स्ट्रिंग से छवि संसाधन बनाता है, फ़ाइल नहीं - यह लगभग कुछ भी हो सकता है, आप एक सामग्री में भी टाइप कर सकते हैं। उदाहरण के लिए आप

imagecreatefromstring(base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='));

का उपयोग 1x1 पिक्सेल पारदर्शी gif (ट्रैकिंग gifs के लिए उपयोगी)

दी, आप imagecreatefromstring के माध्यम से सब कुछ दे सकते हैं पाने के लिए कर सकते हैं, लेकिन यह स्मृति कुशल नहीं होगा - बड़ी छवियों से निपटने बहुत मेमोरी लेता है और कम मेमोरी सीमा के साथ जो एक बड़ा अंतर बनाता है।

+1

यह वास्तव में सवाल का जवाब नहीं देता है, हालांकि - यह वास्तुशिल्प निर्णय क्यों बनाया गया था? क्यों नहीं 'imagecreatefromfile() 'है जो अज्ञात प्रारूप है? –

+0

यह हो सकता है कि वे PHP में चीजें जोड़ दें: PHP 4 जारी होने के बाद से 'imagecreatefrom * 'फ़ंक्शन रहे हैं,' imagecreatefromstring' पहले नहीं था - यह 4.0.4 अतिरिक्त है। मेरा अनुमान है कि उन्होंने फ़ाइल-प्रारूप-विशिष्ट कार्यों को जोड़ा है, बाद में एक प्रारूप अज्ञेयवादी फ़ंक्शन बनाया है, लेकिन जो पहले से ही रिलीज़ हो चुका है उसे बदलने में बहुत देर हो चुकी है। और चूंकि जीडी काम करता है और इसके आसपास कोई वास्तविक काम नहीं किया गया है, वर्षों से नहीं बदला है। – c2h5oh

+0

@ c2h5oh: मेरा मानना ​​है कि मेमोरी उपभोग के लिए भी कोई फर्क नहीं पड़ता है, क्योंकि imagecreatefromjpeg आदि के बाद जीडी छवि को कच्चे प्रारूप में परिवर्तित करता है और मेमोरी खपत एक ही है, दोनों फ़ंक्शन के साथ आप अभी भी अपनी छवि को मेमोरी – dynamic

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