Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

GD का उपयोग कर PHP में इमेजेज को मैनिपुलेट करना

by
Difficulty:IntermediateLength:MediumLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

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

इस ट्यूटोरियल में, आप PHP में GD (Graphic Draw) लाइब्रेरी के बारे में जानेंगे। आप देखेंगे कि इस लाइब्रेरी का उपयोग इमेजेज को आकार बदलने, क्रॉप करने, रोटेट करने या फ़िल्टर करने के लिए कैसे किया जा सकता है।

GD क्या है?

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

PHP GD लाइब्रेरी- जो ग्राफिक ड्रा का शॉर्ट है का उपयोग करके लगभग सभी बेसिक इमेजेज को मैनिपुलेट कर सकता है।

सेट अप

यदि आप विंडोज पर काम कर रहे हैं, तो आप php_gd2.dll फ़ाइल को php.ini में एक्सटेंशन के रूप में शामिल कर सकते हैं। यदि आप XAMPP की तरह कुछ उपयोग कर रहे हैं, तो आपको php_gd2.dll फ़ाइल डायरेक्टरी xampp\php\ext में मिल जाएगी। आप phpinfo(); फंक्शन का उपयोग करके जांच सकते हैं की आपके सिस्टम पर GD इनस्टॉल है या नहीं। यदि आप परिणामस्वरूप आउटपुट के माध्यम से स्क्रॉल करते हैं, तो आपको निम्न के जैसा कुछ मिल जाएगा।

PHP XAMPP GD

इंस्टालेशन प्रोसेस के बारे में अधिक जानने के लिए आप आवश्यकताओं और इंस्टालेशन पेजेज पर भी जा सकते हैं।

PHP GD का उपयोग कर इमेजेज को बनाना

PHP का उपयोग कर इमेजेज के मैनीपुलेशन की दिशा में पहला कदम उन्हें इमेज रिसोर्स के रूप में मेमोरी में लोड करना है। यह विभिन्न फोर्मट्स के लिए विभिन्न फंक्शन्स का उपयोग करके हासिल किया जा सकता है। इन सभी फंक्शन्स में बहुत समान नाम हैं इसलिए उन्हें याद रखना आसान है।

एक नई इमेज बनाएँ

Imagecreatetruecolor() फ़ंक्शन उपयोगी साबित होगा यदि आपके पास कोई ओर्जिनल इमेज सोर्स नहीं है जिसे आप मैनिपुलेट करना चाहते हैं। यह दो इन्टिजर पैरामीटर स्वीकार करता है: चौड़ाई और ऊंचाई। यदि योजना के हिसाब से गया तो यह एक इमेज रिसोर्स रीटर्न कर देगा। रीटर्न किया गया इमेज रिसोर्स मूल रूप से निर्दिष्ट चौड़ाई और ऊंचाई के साथ एक काली इमेज है।

एक इमेज फ़ाइल लोड करें

यदि आप पहले से स्टोर की गयी इमेजेज में मैनिपुलेट करने की योजना बना रहे हैं, तो आपको imagecreatefromjpeg(), imagecreatefrompng(), और imagecreatefromgif() जैसे फ़ंक्शंस का उपयोग करने से लाभ होगा। ये लोड इमेज फ़ाइल से सभी डेटा के साथ एक इमेज रिसोर्स बना देगा। ये फ़ंक्शन एक पैरामीटर स्वीकार करते हैं जो उस इमेज का स्थान निर्दिष्ट करता है जिसे आप या तो URL के रूप में या फ़ाइल पाथ के रूप में लोड कर रहे हैं।

एक स्ट्रिंग से एक इमेज बनाएँ

GD लाइब्रेरी आपको PHP में imagecreatefromstring() फ़ंक्शन का उपयोग करके स्ट्रिंग से इमेजेज बनाने की अनुमति देती है। याद रखें कि आपको imagecreatefromstring() से पहले दिए गए स्ट्रिंग पर base64_decode() का उपयोग करना होगा। फ़ंक्शन आटोमेटिक रूप से पता लगा सकता है कि इमेज टाइप JPG, PNG, GIF, या कोई अन्य समर्थित फॉर्मेट है या नहीं।

एक इमेज को रोटेट, स्केल, क्रॉप, और फ्लिप करें

कुछ सामान्य ऑपरेशंस जिन्हें आप इमेज रिसोर्स पर एक्सेक्यूट करना चाहते हैं वे रोटेट, स्केलिंग, क्रॉपिंग और फ्लिपिंग हैं।

रोटेशन

आप imagerotate() फ़ंक्शन का उपयोग करके स्क्रिप्ट में पहले से लोड की गई एक इमेज को घुमा सकते हैं। यह इमेज के केंद्र का उपयोग घुमाव के केंद्र के रूप में प्रदान किए गए कोण पर इमेज को घुमाएगा। एंगल को फ्लोट वैल्यू के रूप में प्रदान किया जाता है, और PHP इसे रोटेशन के लिए डिग्री वैल्यू मानता है। कभी-कभी, घुमावदार इमेज के ओरिजिनल संस्करण की तुलना में अलग-अलग डायमेंशन होंगे। इसका मतलब है कि आप रोटेशन के बाद एक खुला क्षेत्र के साथ खत्म हो जाएगा। Imagerotate() फ़ंक्शन का तीसरा पैरामीटर रोटेशन के बाद रिक्त क्षेत्र के बैकग्राउंड रंग को निर्दिष्ट करने के लिए उपयोग किया जा सकता है।

स्केलिंग

GD लाइब्रेरी का उपयोग कर इमेज को स्केल करना बहुत आसान है। आपको इमेजेज के साथ-साथ imagescale() फ़ंक्शन पर इमेज रिसोर्स के साथ-साथ चौड़ाई और ऊंचाई को पास करना होगा। यदि आप ऊंचाई को छोड़ देते हैं, तो आस्पेक्ट रेश्यो को संरक्षित करते समय GD निर्दिष्ट चौड़ाई पर इमेज को स्केल करेगा। आप इमेज को स्केल करने के लिए मोड भी निर्दिष्ट कर सकते हैं। इसे IMG_NEAREST_NEIGHBOUR, IMG_BILINEAR_FIXED, IMG_BICUBIC आदि पर सेट किया जा सकता है। एक महत्वपूर्ण बात यह है कि आपको याद रखने की आवश्यकता है कि यह फ़ंक्शन ओरिजिनल को संशोधित करने के बजाय एक नया स्केल की गयी इमेज सोर्स को रीटर्न करता है।

क्रॉपिंग

आप GD में imagecrop() फ़ंक्शन का उपयोग करके किसी भी इमेज रिसोर्स को क्रॉप कर सकते हैं। पहला पैरामीटर ओरिजिनल इमेज रिसोर्स है, और दूसरा पैरामीटर keys, x, y, width और height के साथ एक अस्सोसिएटिव ऐरे है, जो क्रॉपिंग विंडो की पोजीशन और डायमेंशन निर्दिष्ट करता है।

Crop and Rotate Images Using PHP

उपरोक्त तितली वाली इमेज को निम्नलिखित कोड का उपयोग करके क्रॉप किया गया:

असल में, हम $size वेरिएबल में सबसे छोटी तरफ की लंबाई स्टोर करते हैं। इस वेरिएबल का उपयोग तब हमारे क्रॉपिंग रेक्टेंगल की सीमा को परिभाषित करने के लिए किया जाता है। अंत में, इमेज को इस तरह से घटाया गया है कि यह केवल 300 पिक्सल चौड़ा और लंबा है। यह हमें एक उचित आकार की स्क्वायर इमेज देता है।

फ्लिपिंग इमेजेज

इमेजेज को imageflip() फ़ंक्शन का उपयोग करके हॉरिज़ॉन्टली, वर्टिकली या दोनों दिशाओं में फ़्लिप किया जा सकता है। यह उस इमेज रिसोर्स को स्वीकार करता है जिसे आप पहले पैरामीटर के रूप में फ़्लिप करना चाहते हैं और फ्लिप मोड को दूसरे पैरामीटर के रूप में फ़्लिप करना चाहते हैं। फ्लिप मोड को IMG_FLIP_HORIZONTAL, IMG_FLIP_VERTICAL, या IMG_FLIP_BOTH पर सेट किया जा सकता है।

उपरोक्त आकृति में टॉप लेफ्ट इमेज ओरिजिनल है। IMG_FLIP_HORIZONTAL का उपयोग करके टॉप राइट इमेज बनाई गई थी, बॉटम लेफ्ट इमेज IMG_FLIP_VERTICAL का उपयोग करके बनाई गई थी, और बॉटम राइट इमेज IMG_FLIP_BOTH का उपयोग करके बनाई गई थी। (कौवे वाली इमेज पिक्साबे से है।)

एक इमेज में फ़िल्टर लागू करना

GD में एक बहुत उपयोगी imagefilter() फ़ंक्शन भी है जो पिछले इमेजेज के फ़ंक्शंस का उपयोग करके लोड किए गए विभिन्न इमेज रिसोर्सेज पर फ़िल्टर लागू कर सकता है। यह फ़ंक्शन आपके द्वारा लागू किए जा रहे फ़िल्टर के आधार पर विभिन्न पैरामीटर्स को स्वीकार कर सकता है।

स्टार्टर्स के लिए, इमेज रिसोर्स और उस फ़िल्टर का नाम निर्दिष्ट करें जिसे आप लागू करना चाहते हैं। आप इसे डॉक्स में उल्लिखित 12 पूर्वनिर्धारित फ़िल्टर टाइप्स में से एक पर सेट कर सकते हैं

  • IMG_FILTER_NEGATE: इमेज में रंगों को उलट देता है
  • IMG_FILTER_GRAYSCALE: इमेज से रंग हटा देता है
  • IMG_FILTER_BRIGHTNESS: इमेज को उज्ज्वल (brighter) या गहरा (dark) बनाता है
  • IMG_FILTER_CONTRAST: इमेज के कंट्रास्ट को बढ़ाता है
  • IMG_FILTER_COLORIZE: इमेज को किसी सिलेक्टेड रंग में टिंट करता है
  • IMG_FILTER_EDGEDETECT: इमेज के किनारों को हाइलाइट करता है
  • IMG_FILTER_EMBOSS: किनारे का पता लगाने के समान, लेकिन प्रत्येक किनारे को एक उभरा दिखाता है
  • IMG_FILTER_GAUSSIAN_BLUR: Gaussian मेथड का उपयोग कर इमेज को धुंधला करता है
  • IMG_FILTER_SELECTIVE_BLUR: चुनिंदा मेथड का उपयोग कर इमेज को धुंधला करता है
  • IMG_FILTER_MEAN_REMOVAL: एक स्टाइल वाली इमेज बनाने के लिए एक इफ़ेक्ट
  • IMG_FILTER_SMOOTH: image में जेग्ड (jagged) किनारो को सुचारू बनाता है
  • IMG_FILTER_PIXELATE: इमेज को पिक्सलेटेड (pixelated) दिखाता है

NEGATE, GRAYSCALE, EDGE_DETECT और EMBOSS जैसे कुछ फ़िल्टरों को किसी भी अतिरिक्त डेटा की आवश्यकता नहीं है। अन्य फ़िल्टर, जैसे BRIGHTNESS, CONTRAST या SMOOTH, एक अतिरिक्त पैरामीटर स्वीकार कर सकते हैं जो अंतिम इमेज की ब्राइटनेस, कंट्रास्ट या स्मूदनेस की मात्रा निर्दिष्ट करता है। PIXELATE पैरामीटर आपको दो अतिरिक्त पैरामीटर निर्दिष्ट करने की अनुमति देता है: ब्लॉक आकार के साथ ही पिक्सेलेशन के मोड। अंत में, COLORIZE फ़िल्टर चार पैरामीटर्स को स्वीकार करता है जो लाल, हरे, और नीले रंग के कंपोनेंट्स के साथ-साथ अल्फा चैनल की वैल्यू निर्धारित करते हैं।

ऊपरी बाईं ओर की इमेज ओरिजिनल है। टॉप राइट इमेज को COLORIZE फ़िल्टर का उपयोग करके बनाया गया था, बॉटम लेफ्ट ओर GRAYSCALE फ़िल्टर का उपयोग करके बनाया गया था, और बॉटम राइट ओर की इमेज BRIGHTNESS फ़िल्टर का उपयोग करके बनाई गई थी। (यह तितली वाली इमेज Pixabay में मिली थी।)

अन्य उपयोगी इमेज मैनिपुलेशन फंक्शन्स

आपको कुछ अन्य सामान्य GD फंक्शन्स के बारे में भी पता होना चाहिए जो हर समय काम में आते हैं।

इमेज डाइमेंशन्स प्राप्त करें

आप imagesx() और imagesy() फ़ंक्शंस का उपयोग करके इमेज रिसोर्स की चौड़ाई और ऊंचाई निर्धारित कर सकते हैं।

getimagesize() नामक एक अन्य फ़ंक्शन का उपयोग इमेज की चौड़ाई और ऊंचाई को इसके टाइप के साथ प्राप्त करने के लिए भी किया जा सकता है। यह फ़ंक्शन इमेज की चौड़ाई, ऊंचाई और फॉर्मेट को निर्दिष्ट करने वाले एलिमेंट्स के साथ एक ऐरे देता है। ऐरे के पहले दो एलिमेंट चौड़ाई और ऊंचाई का वर्णन करते हैं, और तीसरे एलिमेंट में एक कांस्टेंट होता है जो फाइल फॉर्मेट को निर्दिष्ट करता है: IMAGETYPE_PNG, IMAGETYPE_GIF, आदि में से एक।

एक इमेज को सेव करना

एक बार जब आप किसी इमेज में सभी वांछित परिवर्तन कर लेते हैं, तो आप शायद इसे ब्राउज़र में आउटपुट करना चाहेंगे या इसे फ़ाइल के रूप में सेव करना चाहेंगे। किसी भी मामले में, आपको imagejpeg(), imagepng(), या imagegif() जैसे GD आउटपुट फ़ंक्शंस का उपयोग करना होगा। आप अपने इमेज रिसोर्स को इन आउटपुट फ़ंक्शंस में से एक में पास कर देंगे और, यदि आप इमेज को किसी फ़ाइल में सेव करना चाहते हैं, तो आप एक फ़ाइल नाम भी निर्दिष्ट करेंगे। आप इमेज टाइप के आधार पर एक तीसरे वैकल्पिक पैरामीटर का उपयोग कर आउटपुट इमेज की क्वालिटी को भी नियंत्रित कर सकते हैं।

डायरेक्टरी में सभी इमेजेज का आकार बदलना

चलिए कुछ व्यावहारिक कार्य करने के लिए अब तक प्राप्त ज्ञान को लागू करते हैं। इस सेक्शन में, हम 640 पिक्सेल की चौड़ाई रखने के लिए किसी विशेष डायरेक्टरी में सभी JPEG इमेजेज का आकार बदल देंगे। ओरिजिनल इमेज के डायमेंशन के आधार पर ऊंचाई की गणना आटोमेटिक रूप से की जाएगी।

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

उपर्युक्त कोड में, हम Nature टाइटल वाली डायरेक्टरी में .jpg एक्सटेंशन वाली सभी इमेजेज को खोजने के लिए glob() फ़ंक्शन का उपयोग करके प्रारंभ करते हैं। इमेज फ़ाइलों को एक ऐरे में संग्रहीत किया जाता है, और हम उन्हें एक-एक करके लूप करते हैं।

चूंकि हम जिन इमेजेज का आकार बदलना चाहते हैं वे JPEG हैं, इसलिए हम imagecreatefromjpeg() फ़ंक्शन को स्क्रिप्ट में लोड करने के लिए उपयोग करते हैं। imagescale() फ़ंक्शन का उपयोग तब हमारे मामले में इमेज को एक विशिष्ट चौड़ाई -640 पिक्सल में आकार देने के लिए किया जाता है। हमने निश्चित ऊंचाई निर्दिष्ट नहीं की है, इसलिए ऊंचाई की गणना आटोमेटिक रूप से की जाएगी।

प्रत्येक ओरिजिनल इमेज फ़ाइलों में -1920x1080 ने इसके डाइमेंशन्स को इंगित करने के लिए फ़ाइल नाम में जोड़ा था। हम ओरिजिनल फ़ाइल नाम पर str_replace() का उपयोग करते हैं और नए इमेज आकार के साथ -1920X1080 को रीप्लेस करते हैं।

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

डायरेक्टरी में प्रत्येक इमेज पर ग्रेस्केल और कंट्रास्ट फ़िल्टर लागू करें

इस बार, हम अपनी डायरेक्टरी में प्रत्येक इमेज पर दो अलग-अलग फ़िल्टर लगाएंगे और अंतिम परिणाम को फ़ाइल नाम में कोई बदलाव किए बिना एक अलग डायरेक्टरी में सेव करेंगे। चलो कोड में गोता लगाएँ, और मैं समझाऊंगा कि प्रत्येक फंक्शन बाद में क्या करता है।

जैसा कि आप देख सकते हैं, हम Nature डायरेक्टरी से इमेजेज को लोड करते हैं जैसे हमने पिछले उदाहरण के लिए किया था। हालांकि, हम लोड इमेज पर फ़िल्टर लागू करने के लिए इस बार imagefilter() फ़ंक्शन का उपयोग करेंगे।

ध्यान दें कि imagefilter() ओरिजिनल इमेज को मॉडिफाई करता है और ऑपरेशन की सफलता या विफलता के आधार पर TRUE या FALSE देता है। यह imagecale() फ़ंक्शन से अलग है जिसे हमने पिछले सेक्शन में उपयोग किया था, जिसने स्केल किए गए इमेज रिसोर्स को रीटर्न कर दिया था।

ध्यान में रखना एक और महत्वपूर्ण बात यह है कि कंट्रास्ट फ़िल्टर -100 से 100 तक वैल्यू स्वीकार करता है। नकारात्मक वैल्यू अधिक कंट्रास्ट, और सकारात्मक वैल्यू कम कंट्रास्ट वाले होते हैं। यह कुछ लोगों की अपेक्षा के विपरीत है! 0 की वैल्यू इमेज को अपरिवर्तित छोड़ देगा।

दूसरी ओर, ब्राइटनेस फ़िल्टर, -255 और 255 की न्यूनतम और अधिकतम सीमा है। इस मामले में नेगेटिव वैल्यू न्यूनतम ब्राइटनेस का तात्पर्य है, और पॉजिटिव वैल्यू अधिकतम ब्राइटनेस का तात्पर्य।

हमें basename() फ़ंक्शन का उपयोग करके फ़ाइल पाथ से फ़ाइल नाम मिलता है और फिर imagejpeg() फ़ंक्शन का उपयोग करके इमेज को सेव करता है।

अंतिम विचार

इस ट्यूटोरियल का उद्देश्य आपको PHP में GD लाइब्रेरी से परिचित कराना था और आपको यह दिखाने के लिए कि इन जीवन को अपने जीवन को आसान बनाने के लिए कैसे उपयोग किया जाए। आप अपनी खुद की इमेज मैनिपुलेशन स्क्रिप्ट लिखने के लिए एक गाइड के रूप में ट्यूटोरियल के अंत में उदाहरणों का उपयोग कर सकते हैं। उदाहरण के लिए, आप इमेजेज का आकार बदल सकते हैं, अगर यह imagesx() फ़ंक्शन का उपयोग करके इसकी चौड़ाई निर्धारित करके किसी दिए गए सीमा से अधिक व्यापक हो।

इन सभी फंक्शन्स में इमेज मैनीपुलेशन को आसान बनाने और अंत में आपको बहुत समय बचाने के लिए कई संभावनाएं खुलती हैं। यदि आपके पास इस ट्यूटोरियल से संबंधित कोई प्रश्न हैं, तो कृपया मुझे कमैंट्स में बताएं।

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.