透明处理

对于透明处理,我们都是在得到像素数组后,将该数组中每一个像素的透明度乘以n,然后保存像素数组,最后使用putImageData()方法将图像重新绘制在画布上。

语法:

 for(var i=0;i<data.length;i++){
            data[i+3]=data[i+3]*n;
        }

说明:

n的取值范围为0.0~1.0

看下面一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>scale()方法的副作用</title>
    <script>
        function $(id){
            return document.getElementById(id);
        }
        window.οnlοad=function(){
            var cv=$('canvas');
            var cxt=cv.getContext('2d');

            var img=new Image();
            img.src='./images/1.png';

            img.οnlοad=function(){
                cxt.drawImage(img,10,10);
                var imgData=cxt.getImageData(10,10,120,120);
                var data=imgData.data;
                //遍历每个像素
                for(var i=0;i<data.length;i+=4){
                    data[i+3]=data[i+3]*0.3;
                }
                //在指定位置输出图片
                cxt.putImageData(imgData,140,10);
            };
        };
    </script>
</head>
<body>
    <canvas id="canvas" width='250' height='150' style='border:1px solid grey;'></canvas>
</body>
</html>

浏览器预览效果如下图:


对于透明处理,大家可能会用cxt.globalAlpha来处理,但其实这种做法是错误的,因为cxt.globalAlpha作用的是整个canvas,这个与预期效果是不一样的。我们预期的效果只是希望将图片透明化,而不希望canvas其他地方的透明度也跟着改变。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值