使用HTML5 <canvas>元素,我想加载一个图像文件(PNG, JPEG等),将其完全透明地绘制到画布上,然后将其淡入。我已经弄清楚如何加载图像并将其绘制到画布上,但我不知道如何改变其不透明度。
这是我到目前为止的代码:
var canvas = document.getElementById('myCanvas');
if (canvas.getContext)
{
var c = canvas.getContext('2d');
c.globalAlpha = 0;
var img = new Image();
img.onload = function() {
c.drawImage(img, 0, 0);
}
img.src = 'image.jpg';
}
有人能给我指出正确的方向吗比如设置一个属性或者调用一个函数来改变透明度?
我认为这最好地回答了问题,它实际上改变了已经画出来的东西的alpha值。也许当这个问题被问到时,这不是api的一部分。
给定2d context c。
function reduceAlpha(x, y, w, h, dA) {
let screenData = c.getImageData(x, y, w, h);
for(let i = 3; i < screenData.data.length; i+=4){
screenData.data[i] -= dA; //delta-Alpha
}
c.putImageData(screenData, x, y );
}
我也在寻找这个问题的答案,(澄清,我想能够绘制一个图像与用户定义的不透明度,如如何绘制形状与不透明度),如果你绘制原始形状,你可以设置填充和笔画颜色与alpha来定义透明度。就我目前得出的结论而言,这似乎并不影响图像绘制。
//works with shapes but not with images
ctx.fillStyle = "rgba(255, 255, 255, 0.5)";
我已经得出结论,设置globalCompositeOperation与图像工作。
//works with images
ctx.globalCompositeOperation = "lighter";
我想知道是否有某种第三种设置颜色的方法,这样我们就可以轻松地为图像着色并使其透明。
编辑:
经过进一步的挖掘,我得出的结论是,你可以在绘制图像之前通过设置globalAlpha参数来设置图像的透明度:
//works with images
ctx.globalAlpha = 0.5
如果你想在一段时间内实现渐隐效果你需要某种循环来改变alpha值,这很简单,实现它的一种方法是setTimeout函数,查找它来创建一个循环来改变alpha值。
一些使用globalAlpha的简单示例代码:
ctx.save();
ctx.globalAlpha = 0.4;
ctx.drawImage(img, x, y);
ctx.restore();
如果你需要加载img:
var img = new Image();
img.onload = function() {
ctx.save();
ctx.globalAlpha = 0.4;
ctx.drawImage(img, x, y);
ctx.restore()
};
img.src = "http://...";
注:
将'src'设置在最后,以确保在所有平台上调用onload处理程序,即使图像已经在缓存中。
在保存和恢复之间包装诸如globalAlpha之类的更改(实际上经常使用它们),以确保您不会从其他地方破坏设置,特别是当从事件中调用绘图代码时。