【发布时间】:2014-04-19 10:58:03
【问题描述】:
我注意到getImageData 有一个奇怪的问题;获取图像数据时,图像的透明度似乎被忽略了。
由于任何图像都需要在获得图像数据之前绘制到canvas,我认为这是canvas 不透明的问题。但我错了,因为在drawImage 中使用canvas 作为参数可以保持透明度。
这是我加载图像的方式;
var load_image = function(name, url, holder, callback) {
var img = new Image();
img.src = url;
img.addEventListener('load', function(e) {
var canvas = make_canvas(e.target.width, e.target.height);
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(e.target, 0, 0);
holder[name] = {canvas: canvas, ctx: ctx};
delete e.target;
callback.call();
}, false);
};
callback 只是简单的绘图函数,它调用draw_image 来绘制图像。
普通版;
var draw_image = function(ctx, img, sx, sy, w, h, dx, dy) {
ctx.drawImage(img.canvas, sx, sy, w, h, dx, dy, w, h);
};
它只是将画布作为drawImage 的参数,结果与预期的一样,并保持了透明度。 Example。
图像数据版本;
var draw_image = function(ctx, img, sx, sy, w, h, dx, dy) {
var imagedata = img.ctx.getImageData(sx, sy, w, h);
ctx.putImageData(imagedata, dx, dy);
};
这个从与普通版使用的相同的画布中获取所需矩形的图像数据,并将图像数据放在我要绘制的画布上。我认为应该保持透明度,但事实并非如此。 Example。 (这是一个 Dropbox 链接,因为 origin-clean 标志。)
我认为应该使用getImageData 保持透明度是错误的吗?还是我只是以错误的方式使用它?
无论哪种方式,我们都非常感谢您的帮助。
【问题讨论】:
标签: javascript html canvas getimagedata