सही है, अपने कोड मौजूदा चित्र स्केल नहीं करेगा।
context.scale
केवल नया चित्र, नहीं मौजूदा चित्र को प्रभावित करता है।
context.putImageData
सहेजे गए मूल पिक्सल को कैनवास पर वापस रखेगा, लेकिन इमेजडेटा ड्रॉइंग कमांड नहीं है, इसलिए इसके परिणाम स्केल नहीं किए जाएंगे।
मौजूदा पिक्सल को स्केल करने के लिए आपको पिक्सल को अपने कैनवास के बाहर किसी इकाई में सहेजना होगा। बाहरी इकाई एक नया छवि तत्व या दूसरा कैनवास तत्व हो सकता है।
उदाहरण कोड और एक डेमो: http://jsfiddle.net/m1erickson/p5nEE/
// canvas related variables
var canvas=document.getElementById("canvas");
var context=canvas.getContext("2d");
// draw a test square
context.fillStyle="red";
context.fillRect(0,0,50,50);
// create an image from the canvas
// clear & scale the canvas
// draw the image to the canvas
var imageObject=new Image();
imageObject.onload=function(){
context.clearRect(0,0,canvas.width,canvas.height);
context.scale(1.2,1.2);
context.drawImage(imageObject,0,0);
}
imageObject.src=canvas.toDataURL();
मैं इस मामले के साथ एक ही समस्या है: दूसरे कैनवास जब दूसरी कैनवास से नई छवि बनाने के लिए, कुछ पिक्सेल में अल्फा = 0 है। अल्फा चला गया है, इसलिए यह पिक्सेल के लिए अल्फा = 0 के साथ काला हो गया है; इसे कैसे हल करें? – billyzaelani
प्रतीक्षा करें, तर्क 6 और 7 को रखने के लिए इमेज का उपयोग छवि को स्केल करने के लिए नहीं किया जा सकता है? यदि नहीं, तो मुझे समझ में नहीं आता कि [दस्तावेज़ीकरण] (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData) कह रहा है कि वे वास्तव में करते हैं। – Michael
@ माइकल आप भ्रमित हो सकते हैं 'ctx.drawImage()' जिसका अंतिम 2 तर्क वास्तव में परिणाम को स्केल करते हैं। जिस तरह से यह जवाब फ्रेम करता है, यह एक अच्छा मानसिक मॉडल है: ड्रॉ इमेज जैसे आदेश खींचें पैमाने का सम्मान करेंगे, आदेशों को नहीं रखेंगे। –