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

PHP में इमेजेज को रीसाइज और मैनिपुलेट करें (उदाहरण के साथ)

by
Difficulty:IntermediateLength:MediumLanguages:

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

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

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

इस ट्यूटोरियल में, हम GD में कई और उपयोगी फंक्शन्स के बारे में जानेंगे और यह भी जानेंगे की हमारे इमेज मैनिपुलेशन फंक्शन्स को आटोमेटिक करने के लिए उनका उपयोग कैसे किया जा सकता है।

एक कनवॉल्यूशन (Convolution) मैट्रिक्स का उपयोग कर इमेजेज को मैनिपुलेट करना

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

इस प्रकार के फ़िल्टर को निर्दिष्ट करने का एक आसान तरीका "कनवॉल्यूशन मैट्रिक्स" कहलाता है। GD इमेज रिसोर्स $image के लिए 3x3 कनवॉल्यूशन मैट्रिक्स लागू करने के लिए imageconvolution($image, $matrix, $div, $offset) फ़ंक्शन को सप्लाई करता है।

$matrix पैरामीटर तीन ऐरे का एक ऐरे है, जिनमें से प्रत्येक में तीन फ्लोट वैल्यू हैं- यानी। यह एक 3x3 मैट्रिक्स है। पहले ऐरे का पहला एलिमेंट टॉप-लेफ्ट पिक्सेल के कलर वैल्यू से गुणा किया जाता है। इसी प्रकार, पहली ऐरे का दूसरा एलिमेंट सेंट्रल पिक्सेल के शीर्ष पर सीधे पिक्सेल के कलर वैल्यू से गुणा किया जाता है। पिक्सेल का अंतिम कलर इन सभी गुणाओं के परिणाम को जोड़कर प्राप्त किया जाता है और फिर इसे नॉर्मलाईज़ेशन के लिए $div द्वारा विभाजित किया जाता है। नॉर्मलाईज़ेशन आम तौर पर अंतिम कलर वैल्यू को 255 से नीचे रखता है।

जैसा कि हमने देखा है, $div पैरामीटर को इसके वैल्यू को सामान्य करने के लिए कनवॉल्यूशन के परिणामस्वरूप डिवीज़र के रूप में उपयोग किया जाता है। दूसरी तरफ $offset पैरामीटर का उपयोग सभी रंगों के लिए ऑफ़सेट वैल्यू निर्दिष्ट करने के लिए किया जाता है। आप देखेंगे कि यह नीचे दिए गए उदाहरणों में अंतिम परिणाम को कैसे प्रभावित करता है।

कनवॉल्यूशन उदाहरण

यहां कुछ अलग कनवॉल्यूशन मैट्रिक्स की एक सूची दी गई है जिसे हमने एक टेबल पर एक कप की इमेज पर लागू किया है।

बॉक्स ब्लर

बॉक्स ब्लर अपने बगल वालो के साथ प्रत्येक पिक्सेल की एवरेज निकालने का काम करता है। हमने डिवीज़र की वैल्यू 9 तक सेट की है क्योंकि तीन ऐरे में सभी एलिमेंट्स का योग 9 है।

शार्प बनाना

प्रत्येक पिक्सेल और बगल वालो के बीच डिफरेंस को एक्सअग्गेरेटिंग (exaggerating) करके शार्प करने का कार्य करता है। यह किनारों को थोड़ा स्पष्ट बनाता है। शार्पन के मामले में, डिवीज़र अभी भी 1 है क्योंकि तीन ऐरे में सभी एलिमेंट्स का योग 1 है।

एम्बॉस करना

एम्बॉस मैट्रिक्स शार्पण मैट्रिक्स के समान है, सिवाय इसके कि वैल्यू ऊपरी लेफ्ट और निचे राइट की ओर सकारात्मक हैं-जो एम्बॉस इफ़ेक्ट बनाता है। एम्बॉस कनवॉल्यूशन मैट्रिक्स के मामले में सभी एलिमेंट्स का योग 1 है, इसलिए हमें नॉर्मलाईज़ेशन या कलर ऑफसेट के बारे में चिंता करने की ज़रूरत नहीं है।

किनारे को डिटेक्ट करना

किनारे की पहचान शार्पन के समान है, लेकिन इफ़ेक्ट इससे भी मजबूत है। इसके अलावा, इमेज के ओरिजिनल वैल्यू को बगल वालो की तुलना में अधिक वेट नहीं दिया जाता है- इसका मतलब है कि हम केवल किनारों की परवाह करते हैं, ओरिजिनल सॉलिड कलर वाले क्षेत्रों में नहीं।

किनारे का पता लगाने के साथ, सभी ऐरे एलिमेंट्स का योग 0 है। इसका मतलब यह है कि जब तक कलर में शार्प परिवर्तन नहीं होता है, तब तक हम जो इमेज प्राप्त करेंगे, वह ज्यादातर kaala हो जाएगा, जो आम तौर पर ऑब्जेक्ट्स के किनारों पर होता है। ऑफसेट पैरामीटर को 255 पर सेट करके ज्यादातर काली इमेज को सफेद में बदल दिया जा सकता है।

निम्नलिखित इमेज इन सभी कनवॉल्यूशन मॉरीसस का परिणाम दिखाता है।

Convolution Matrix

इमेज कॉपी फंक्शन्स

PHP GD में एक इमेज के भाग की कॉपी बनाने के लिए बहुत सारे फ़ंक्शन हैं और फिर इसका आकार बदलें या इसे मर्ज करें। इन फंक्शन्स का उपयोग करते समय, यह याद रखना महत्वपूर्ण है कि PHP इमेज रिसोर्स के टॉप-लेफ्ट कोने को ओरिजिन के रूप में मानता है। एक सकारात्मक x वैल्यू आपको इमेज के राइट की ओर ले जाएगा, और एक सकारात्मक y वैल्यू आपको और नीचे ले जाएगा।

इन फंक्शन्स में से सबसे सरल imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h) है। यह सोर्स इमेज को एक डेस्टिनेशन इमेज पर कॉपी करेगा। $dst_x और $dst_y पैरामीटर टॉप-लेफ्ट कोने को निर्धारित करते हैं, जहां कॉपी की गई इमेज चिपकाई जाएगी। $src_x, $src_y, $src_w, और $src_h पैरामीटर सोर्स इमेज के रेक्टेंगुलर भाग को निर्धारित करते हैं, जिसे डेस्टिनेशन पर कॉपी किया जाएगा।

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

इस समस्या का एक समाधान imagecopyresized($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) फ़ंक्शन का उपयोग करना है। यह imagecopy() के सभी पैरामीटर को एक्सेप्ट करता है और दो अतिरिक्त पैरामीटर्स भी जिससे हम डेस्टिनेशन का साइज पता लगा सकें जहाँ सोर्स इमेज को कॉपी किया जाएगा।

Imagecopyresized() फ़ंक्शन परफेक्ट नहीं है, क्योंकि यह इमेज को ऊपर और नीचे स्केल नहीं करता है। हालांकि, आप imagecopyresampled() फ़ंक्शन का उपयोग करके बेहतर गुणवत्ता का आकार बदल सकते हैं, जो सभी वही वाले पैरामीटर स्वीकार करता है।

ट्रांसपेरेंसी के साथ कॉपी बनाएँ

इमेजेज की कॉपी बनाने से संबंधित दो और फंक्शन हैं जिन्हें आप बहुत उपयोगी पाएंगे: imagecopymerge() और imagecopymergegray()

फ़ंक्शन imagecopymerge($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct) imagecopy() के समान ही है, जहां अतिरिक्त $pct पैरामीटर कॉपी की जाने वाली इमेज की पारदर्शिता निर्धारित करता है। 0 की वैल्यू कोई पारदर्शिता नहीं है, और 100 की वैल्यू पूर्ण पारदर्शिता होती है। जब आप अपने वॉटरमार्क के पीछे मुख्य इमेज के कंटेंट को पूरी तरह से छिपाना नहीं चाहते हैं तो यह बहुत मददगार होगा।

दूसरी तरफ imagecopymergegray() फ़ंक्शन, सोर्स इमेज को ग्रेस्केल में कनवर्ट करने के लिए अंतिम पैरामीटर का उपयोग करता है। यदि यह 0 पर सेट है, तो सोर्स इमेज अपने सभी रंग खो देगी। यदि यह 100 पर सेट है, तो सोर्स इमेज अप्रभावित रहेगी।

इमेज कॉपी का उदाहरण

निम्न उदाहरण इमेज के राइट हाफ को नकारात्मक में बदलने के लिए imagecopy() फ़ंक्शन का उपयोग करता है। हमने पहले ही ट्यूटोरियल में इस कोड स्निपेट में इस्तेमाल किए गए imagefilter() और imagescale() जैसे अन्य फंक्शन्स पर चर्चा की है।

यहां, हम ओरिजिनल इमेज की दो कॉपी बनाते हैं, जिनमें से प्रत्येक को 800 पिक्सल चौड़ा होने के लिए घटा दिया गया है। उसके बाद, हम imagefilter() फ़ंक्शन का उपयोग $img_php_inv इमेज रिसोर्स को नकारात्मक बनाने के लिए करते हैं। इस नकारात्मक इमेज का राइट हाफ इमेज imagecopy() फ़ंक्शन का उपयोग कर ओरिजिनल इमेज पर कॉपी किया गया है।

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

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

निम्न इमेज विभिन्न इमेज फ़िल्टर के संयोजन के साथ इन दो फंक्शन्स के अंतिम परिणाम दिखाती है।

PHP GD Fish Mosaic

इमेजेज में वॉटरमार्क या अन्य जानकारी एम्बेड करना

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

उपर्युक्त कोड स्निपेट में, हमने क्रमशः वॉटरमार्क के लिए मुख्य इमेज के लिए imagecreatefromjpeg() और वॉटरमार्क वाली के लिए imagecreatefrompng() का उपयोग करके दो अलग-अलग इमेज रिसोर्स बनाए हैं। हम imagesx() और imagesy() फ़ंक्शंस का उपयोग करके मुख्य इमेज की चौड़ाई और ऊंचाई निर्धारित करते हैं।

वो सभी इमेजेज जिन्हे आप वॉटरमार्क देना चाहते हैं में समान डाइमेंशन्स नहीं होंगे। यदि आप मुख्य इमेज के डाइमेंशन्स के आधार पर वॉटरमार्क का आकार बदलते नहीं हैं, तो यह अजीब लग सकता है। उदाहरण के लिए, एक 200px वॉटरमार्क 1000px इमेज पर अच्छा लग सकता है, लेकिन यह 600px चौड़ी इमेज के लिए बहुत बड़ा होगा, और यह 2400px वाइड इमेज पर बहुत छोटा दिखाई दे सकता है।

इसलिए, हम imagescale() फ़ंक्शन का उपयोग हमेशा वॉटरमार्क को ओरिजिनल इमेज चौड़ाई के पांचवें हिस्से में रखने के लिए करते हैं। फिर हम सही स्थान पर वॉटरमार्क लगाने के लिए imagecopy() फ़ंक्शन का उपयोग करते हैं। उपर्युक्त कोड स्निपेट का अंतिम परिणाम यहां दिया गया है।

Add Watermark to Images using GD

वॉटरमार्क के अलावा, आप उस स्थान की तरह अन्य जानकारी भी जोड़ सकते हैं जहां एक तस्वीर ली गई थी या एक तस्वीर लेने का समय था।

अंतिम विचार

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

ट्यूटोरियल के दूसरे भाग ने समझाया कि किसी इमेज के हिस्से को कॉपी करने और/या आकार बदलने के लिए इसे कहीं और पेस्ट कैसे करें। यह आसान है जब हम वॉटरमार्क या टाइमस्टैम्प जैसा कुछ इमेज में कुछ जोड़ना चाहते हैं।

कुछ रोचक इमेज इफ़ेक्ट बनाने के लिए इन सभी फंक्शन्स का उपयोग करने का प्रयास करें!

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.