2012-10-01 18 views
5

के रूप में छवि का उपयोग करें क्या पूरे कैनवास या कैनवास के भीतर छवियों के लिए मुखौटा के रूप में आकार के साथ एक छवि का उपयोग करना संभव है?एचटीएमएल 5 कैनवास मास्क

मैं छवियों पर एक मुखौटा के साथ एक कैनवास में छवियां रखना चाहता हूं, और फिर इसे एक नई छवि के रूप में सहेजना चाहता हूं।

+0

हाँ, यदि मुखौटा छवि पर वास्तव में कुछ पारदर्शी क्षेत्र है तो आप कैनवास के शीर्ष पर छवि खींचने के लिए आसानी से 'drawImage()' का उपयोग कर सकते हैं। पारदर्शी भाग अंतर्निहित छवि/कैनवास के माध्यम से चमकता है। – devnull69

+0

मेरा मतलब यह नहीं है कि, मैं छवि को क्लिप क्लिप करना चाहता हूं, ताकि शेष छवि पारदर्शी हो जाए। – Jaap

उत्तर

9

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

आपकी अंतिम छवि केवल खींची जाएगी जहां यह मुखौटा ओवरले करेगा।

var ctx = document.getElementById('c').getContext('2d'); 

ctx.drawImage(YOUR_MASK, 0, 0); 
ctx.globalCompositeOperation = 'source-in'; 
ctx.drawImage(YOUR_IMAGE, 0 , 0); 

More info on global composite operations

+0

यह आंशिक रूप से काम करता है, जब मैं कैनवास में और तस्वीरें जोड़ता हूं तो यह विफल हो जाता है। मैं मुखौटा को ठीक से कैसे सेट कर सकता हूं, इसलिए जब मैं और छवियों को लोड करता हूं तो यह अभी भी मास्क का उपयोग करता है? – Jaap

+0

ग्लोबल कॉम्पोजिटऑपरेशन को मूल रूप से ड्राइंग के बाद मूल रूप से सेट करें (सबसे अधिक संभावना "स्रोत-ओवर")। –

1

पियरे के जवाब के अलावा आप भी एक काले और सफेद छवि अपनी छवि के लिए एक मुखौटा स्रोत के रूप में अपने डेटा को कॉपी करके एक CanvasPixelArray में की तरह उपयोग कर सकते हैं:

var 
dimensions = {width: XXX, height: XXX}, //your dimensions 
imageObj = document.getElementById('#image'), //select image for RGB 
maskObj = document.getElementById('#mask'), //select B/W-mask 
image = imageObj.getImageData(0, 0, dimensions.width, dimensions.height), 
alphaData = maskObj.getImageData(0, 0, dimensions.width, dimensions.height).data; //this is a canvas pixel array 

for (var i = 3, len = image.data.length; i < len; i = i + 4) { 

    image.data[i] = alphaData[i-1]; //copies blue channel of BW mask into A channel of the image 

} 

//displayCtx is the 2d drawing context of your canvas 
displayCtx.putImageData(image, 0, 0, 0, 0, dimensions.width, dimensions.height); 
+3

दुर्भाग्यवश, पिक्सेल बाईपास इतना कुशल नहीं है, ड्रॉ इमेज विधि है। –

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