किसी नकाबपोश छवि में कस्टम बॉर्डर जोड़ने के लिए जावास्क्रिप्ट के कैनवास का उपयोग कैसे करें

Masked images

जावास्क्रिप्ट कैनवस में नकाबपोश छवि सीमाओं में महारत हासिल करना

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

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

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

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

आज्ञा उपयोग का उदाहरण
globalCompositeOperation कैनवास पर चित्रण क्रियाओं की संरचना इस विशेषता द्वारा परिभाषित की जाती है। उदाहरण में ग्लोबलकंपोजिटऑपरेशन ='स्रोत-इन' यह सुनिश्चित करता है कि मुखौटा छवि मुख्य तस्वीर को क्लिप करती है ताकि केवल वे क्षेत्र दिखाई दें जो प्रतिच्छेद करते हैं।
toDataURL() कैनवास की जानकारी को बेस64 के साथ एन्कोडेड छवि में बदल देता है। इससे मास्क और बॉर्डर लगाने के बाद तैयार छवि को पीएनजी के रूप में उपयोग करना संभव हो जाता है। उदाहरण का छवि आउटपुट कैनवास.toDataURL('image/png') का उपयोग करके तैयार किया गया है।
crossOrigin यह सुविधा कैनवास में किसी भिन्न डोमेन से लोड किए गए चित्रों के उपयोग को सक्षम करके सुरक्षा प्रतिबंधों का सम्मान करती है। मास्कआईएमजी.क्रॉसऑरिजिन = 'अनाम' गारंटी देता है कि सीओआरएस समस्याएं पैदा किए बिना मास्क छवि तक पहुंच बनाई जा सकती है।
beginPath() कैनवास पर इस पद्धति का उपयोग करके एक नया पथ शुरू किया जा सकता है। दूसरी विधि यह सुनिश्चित करने के लिए ctx.beginPath() को कॉल करती है कि पथ मास्क के समोच्च का पालन करता है क्योंकि यह नकाबपोश छवि के चारों ओर एक कस्टम बॉर्डर खींचता है।
moveTo() इस प्रक्रिया से, कोई चित्र नहीं बनाया जाता है; इसके बजाय, "पेन" को एक नए आरंभ स्थान पर ले जाया जाता है। बॉर्डर का शुरुआती बिंदु उदाहरण में ctx.moveTo(0, 0) का उपयोग करके स्थित किया गया है, जो मास्क की सीमाओं के चारों ओर सटीक रूप से बॉर्डर खींचने के लिए आवश्यक है।
lineTo() दिए गए निर्देशांकों को प्रारंभिक बिंदु के रूप में उपयोग करते हुए, यह तकनीक एक सीधी रेखा खींचती है। नकाबपोश छवि की सीमा को ctx.lineTo(maskImg.width, 0) का उपयोग करके समाधान में खींची गई रेखाओं द्वारा परिभाषित किया गया है।
stroke() निर्दिष्ट पथ के साथ सीमाएँ या रेखाएँ खींचता है। उदाहरण के लिए, moveTo() और LineTo() का उपयोग मास्क फॉर्म को परिभाषित करने के लिए किया जाता है, और फिर ctx.stroke() का उपयोग मास्क की गई छवि के चारों ओर बॉर्डर लगाने के लिए किया जाता है।
lineWidth यह निर्धारित करता है कि कैनवास पर रेखाएँ कितनी मोटी चित्रित हैं। स्क्रिप्ट ctx.lineWidth = 5 का उपयोग करके मास्क के आकार के चारों ओर 5-पिक्सेल मोटी सीमा स्थापित करती है।
strokeStyle बॉर्डर के रंग या शैली को इंगित करता है. उदाहरण में बॉर्डर का रंग ctx.strokeStyle ='red' का उपयोग करके लाल पर सेट किया गया है।

नकाबपोश छवि पर बॉर्डर कैसे लगाया जाए, इसकी पहचान करना

प्रदान की गई स्क्रिप्ट का उद्देश्य एक छवि के लिए किसी अन्य चित्र को मुखौटा के रूप में उपयोग करना है, और फिर उसका उपयोग करना है नकाबपोश आकृति के चारों ओर एक कस्टम बॉर्डर जोड़ने के लिए। फ़ंक्शन की शुरुआत में मास्क और मुख्य छवि के लिए दो नई छवि ऑब्जेक्ट बनाए जाते हैं। बाहरी स्रोतों से फ़ोटो लोड करते समय, CORS के कारण होने वाली समस्याओं को रोकने के लिए क्रॉस-ओरिजिन सेटिंग आवश्यक है। एक कैनवास बनता है और दोनों छवियों को लोड करने के बाद उसके अनुपात को मुखौटा छवि से मेल खाने के लिए समायोजित किया जाता है। यह छवि चित्रण के दौरान आकार बदलने की समस्याओं से बचाता है और गारंटी देता है कि कैनवास उपयुक्त क्षेत्र के साथ काम करने के लिए तैयार है।

स्क्रिप्ट तब उपयोग करती है कैनवास पर मुखौटा छवि खींचने का कार्य। ऐसा करने पर, मास्क को कैनवास पर लगाया जाता है, जो मास्किंग प्रक्रिया के लिए नींव परत के रूप में कार्य करता है। मास्क को सही ढंग से लगाने के लिए वैश्विक समग्र ऑपरेशन को "सोर्स-इन" पर सेट किया जाना चाहिए। कैनवास को केवल प्राथमिक चित्र के उन क्षेत्रों को बनाए रखने का निर्देश दिया गया है जो मुखौटा छवि से मेल खाते हैं। संक्षेप में, मुखौटा उस आकार को परिभाषित करता है जिससे मुख्य छवि को क्लिप किया गया है। जब मुख्य चित्र इस क्लिपिंग क्षेत्र के अंदर खींचा जाता है, तो समग्र ऑपरेशन "सोर्स-ओवर" पर रीसेट हो जाता है, जिससे पहले से क्लिप की गई सामग्री को प्रभावित किए बिना बॉर्डर पेंटिंग जैसी अतिरिक्त कार्रवाइयां सक्षम हो जाती हैं।

नकाबपोश आकृति पर बॉर्डर लगाने में इसका उपयोग करना शामिल है तकनीक. कैनवास पर निर्दिष्ट पथ या प्रपत्र इस कमांड द्वारा दर्शाया गया है। दूसरे समाधान में, कैनवास पथ को मैन्युअल रूप से उत्पन्न करने और मास्क की सीमाओं का पता लगाने के लिए moveTo() और LineTo() को संयोजित किया गया है। इन तकनीकों के उपयोग से, आप सीमा के आकार को मैन्युअल रूप से निर्दिष्ट कर सकते हैं और सुनिश्चित कर सकते हैं कि यह आयताकार कैनवास सीमा के बजाय मुखौटा के आकार का पालन करता है। सीमा के स्वरूप पर आपका पूर्ण नियंत्रण है क्योंकि प्रॉपर्टी बॉर्डर की मोटाई और सेट करती है संपत्ति अपना रंग निर्धारित करती है।

अंत में, toDataURL() फ़ंक्शन का उपयोग कैनवास को बेस 64 स्ट्रिंग में बदलने के लिए किया जाता है। ऐसा करने से, तैयार छवि - जिसमें मास्क और बॉर्डर शामिल है - एक प्रारूप में बदल जाती है जिसे प्रोग्राम के अन्य क्षेत्रों में आसानी से उपयोग किया जाता है या सर्वर पर अपलोड किया जाता है। समय की गलतियों से बचने के लिए, वादा यह सुनिश्चित करता है कि यह ऑपरेशन केवल तभी समाप्त होगा जब दोनों चित्र पूरी तरह से लोड हो जाएं। ये स्क्रिप्ट दिखाती हैं कि कैसे परिष्कृत छवि संशोधन तकनीकों को, जिसमें मास्किंग और एक गतिशील बॉर्डर लगाना शामिल है, जो मास्क की आकृति से सटीक रूप से मेल खाता है, जावास्क्रिप्ट के कैनवास तत्व के साथ पूरा किया जा सकता है।

विधि 1: नकाबपोश छवि में कस्टम बॉर्डर जोड़ने के लिए कैनवास और स्ट्रोक विधि का उपयोग करना

नकाबपोश छवि के चारों ओर बॉर्डर बनाने के लिए, यह दृष्टिकोण जावास्क्रिप्ट और कैनवस एपीआई का उपयोग करता है। Stroke() का उपयोग नकाबपोश आकृति को रेखांकित करने के लिए किया जाता है।

function applyFiltersAndConvertToBase64(imageUrl, materialImage) {
    return new Promise((resolve, reject) => {
        const maskImg = new Image();
        const mainImg = new Image();
        maskImg.crossOrigin = "anonymous";
        mainImg.crossOrigin = "anonymous";
        let imagesLoaded = 0;
        const onLoad = () => {
            imagesLoaded++;
            if (imagesLoaded === 2) {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = maskImg.width;
                canvas.height = maskImg.height;
                ctx.drawImage(maskImg, 0, 0);
                ctx.globalCompositeOperation = 'source-in';
                ctx.drawImage(mainImg, 0, 0, maskImg.width, maskImg.height);
                ctx.globalCompositeOperation = 'source-over';
                ctx.lineWidth = 5; // Border thickness
                ctx.strokeStyle = 'red'; // Border color
                ctx.stroke(); // Draw border around mask
                const base64Image = canvas.toDataURL('image/png');
                resolve(base64Image);
            }
        };
        maskImg.onload = onLoad;
        mainImg.onload = onLoad;
        maskImg.onerror = reject;
        mainImg.onerror = reject;
        maskImg.src = imageUrl;
        mainImg.src = materialImage;
    });
}

विकल्प 2: कैनवास पथ का उपयोग करके मास्क आकार के चारों ओर एक कस्टम बॉर्डर बनाएं

यह विधि यह सुनिश्चित करती है कि जावास्क्रिप्ट के साथ कैनवस एपीआई का उपयोग करके छवि मास्क पथ का अनुसरण करके बॉर्डर नकाबपोश आकार का बारीकी से अनुसरण करता है।

function applyFiltersAndConvertToBase64(imageUrl, materialImage) {
    return new Promise((resolve, reject) => {
        const maskImg = new Image();
        const mainImg = new Image();
        maskImg.crossOrigin = "anonymous";
        mainImg.crossOrigin = "anonymous";
        let imagesLoaded = 0;
        const onLoad = () => {
            imagesLoaded++;
            if (imagesLoaded === 2) {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = maskImg.width;
                canvas.height = maskImg.height;
                ctx.drawImage(maskImg, 0, 0);
                ctx.globalCompositeOperation = 'source-in';
                ctx.drawImage(mainImg, 0, 0, maskImg.width, maskImg.height);
                ctx.globalCompositeOperation = 'source-over';
                // Create path for the mask shape
                ctx.beginPath();
                ctx.moveTo(0, 0);
                ctx.lineTo(maskImg.width, 0);
                ctx.lineTo(maskImg.width, maskImg.height);
                ctx.lineTo(0, maskImg.height);
                ctx.closePath();
                ctx.lineWidth = 5; // Border thickness
                ctx.strokeStyle = 'blue'; // Border color
                ctx.stroke(); // Apply the border along the path
                const base64Image = canvas.toDataURL('image/png');
                resolve(base64Image);
            }
        };
        maskImg.onload = onLoad;
        mainImg.onload = onLoad;
        maskImg.onerror = reject;
        mainImg.onerror = reject;
        maskImg.src = imageUrl;
        mainImg.src = materialImage;
    });
}

जावास्क्रिप्ट में कस्टम बॉर्डर के साथ नकाबपोश छवियों को बढ़ाना

आपके जावास्क्रिप्ट एप्लिकेशन के उपयोगकर्ता अनुभव को छवियों को छिपाने और काम करते समय कस्टम बॉर्डर सेट करने की क्षमता से काफी बढ़ाया जा सकता है . मास्किंग की मदद से, आप यह तय कर सकते हैं कि किसी छवि के कौन से क्षेत्र दूसरी छवि के आधार पर दिखाई देंगे, जिसे मास्क के रूप में जाना जाता है। नकाबपोश क्षेत्र के चारों ओर एक बॉर्डर जोड़ना एक ऐसा मुद्दा है जिसका कई डेवलपर्स सामना करते हैं, खासकर जब मुखौटा एक सीधा आयताकार आकार नहीं होता है। मास्क की रूपरेखा से सटीक रूप से मेल खाने वाले बॉर्डर वाले प्रोजेक्ट अधिक परिष्कृत और विशेषज्ञ दिखाई देंगे।

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

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

  1. जावास्क्रिप्ट में, मैं एक छवि को छुपाने के लिए दूसरी छवि का उपयोग कैसे कर सकता हूँ?
  2. का उपयोग करते हुए करने के लिए सेट , का उपयोग करके किसी छवि को छिपाने के लिए कैनवास पर मुखौटा बनाएं . मास्क से मिलान करने के लिए, यह प्राथमिक छवि को क्रॉप करेगा।
  3. मैं किसी नकाबपोश छवि के लिए बॉर्डर कैसे बना सकता हूं जो उसके आकार के अनुरूप हो?
  4. मास्क का मार्ग स्थापित करने के बाद और , उपयोग तकनीक. यह आपको मास्क के आकार को वैयक्तिकृत बॉर्डर से घेरने देगा।
  5. का उद्देश्य क्या है कैनवास हेरफेर में?
  6. कैनवास की सामग्री को इसके माध्यम से बेस64-एन्कोडेड छवि में बदल दिया जाता है फ़ंक्शन, जिससे पीएनजी छवि के रूप में उपयोग करना या वितरित करना आसान हो गया है।
  7. मैं प्रदर्शन के लिए कैनवास संचालन को कैसे अनुकूलित कर सकता हूं?
  8. ड्राइंग संचालन की मात्रा कम करें और कैनवास की गति को अधिकतम करने के लिए आमतौर पर उपयोग किए जाने वाले तत्वों को संग्रहीत करने के बारे में सोचें। इससे आपका एप्लिकेशन सुचारू रूप से कार्य करता रहता है और पुनः ड्रॉ की संख्या कम हो जाती है।
  9. क्या मैं कैनवास में क्रॉस-ओरिजिनल छवियां लोड कर सकता हूं?
  10. हाँ, लेकिन CORS कठिनाइयों के बिना छवि उपलब्ध कराने के लिए, आपको सेट करना होगा संपत्ति को .

जावास्क्रिप्ट ऐप्स में, छवियों को मास्क करना और कैनवास में कस्टम बॉर्डर लागू करना परिष्कृत दृश्य तत्व बनाने का एक प्रभावी तरीका है। डेवलपर्स के पास इसका उपयोग करके चित्रों के प्रतिपादन और स्टाइल में हेरफेर करने की क्षमता होती है और परिष्कृत ड्राइंग कमांड जैसे और पथ परिभाषाएँ।

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

  1. उपयोग करने पर विस्तृत मार्गदर्शिका छवियों और मुखौटों में हेरफेर करना, जिसमें ड्राइंग ऑपरेशन भी शामिल है और : एमडीएन वेब डॉक्स .
  2. जावास्क्रिप्ट में छवि मास्किंग कैसे लागू करें और क्रॉस-ओरिजिन संसाधनों को कैसे संभालें, इसकी व्यापक व्याख्या: HTML5 कैनवास ट्यूटोरियल .
  3. छवि प्रतिपादन और ड्राइंग संचालन को अनुकूलित करने पर ध्यान केंद्रित करते हुए कैनवास-आधारित अनुप्रयोगों के लिए प्रदर्शन युक्तियाँ: स्मैशिंग मैगजीन .