问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

HTML5中如何设置画布canvas中用drawImage画出来的每个图片不同的透明度?

发布网友 发布时间:2022-05-12 00:35

我来回答

5个回答

懂视网 时间:2022-05-12 04:56

本文将为大家详细介绍下Canvas中透明度的设置与使用,结合渐进填充与透明度支持,实现图像的Mask效果,线性渐进方式的代码演示如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助

详细解释HTML5 Canvas中渐进填充的参数设置与使用,Canvas中透明度的设置与使用,结合渐进填充与透明度支持,实现图像的Mask效果。

一:渐进填充(Gradient Fill)
Canvas支持两种渐进填充方式,一种为线性渐进填充(Line Gradient Fill),另外一种称
为经向渐变填充(RadialGradient Fill)。其API分别为:
createLinearGradient(x1, y1, x2, y2);
其中x1,y1为第一个点坐标,x2,y2为第二个点坐标。
createRadialGradient(x1, y1, r1, x2, y2, r2);
其中x1, y1为第一个中心点坐标,r1为半径,x2, y2为第二个中心点坐标,r2为半径。
为每个点设置颜色
addColorStop(position, color);
其中position表示位置,大小范围[0~1]其中0表示第一个点,1表示第二个点坐标
Color表示颜色值,任何CSS的颜色值。
渐进填充对象创建与配置之后可以用来设置context的strokeStyle与fillStyle实现文字,
几何形状的渐进颜色填充。

线性渐进方式的代码演示:

1. 垂直(Y)方向颜色渐进

// vertical/Y direction 
var lineGradient = ctx.createLinearGradient (50, 0, 50, 200); 
lineGradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); 
lineGradient.addColorStop(1, 'rgba(255, 255, 0, 1)'); 
ctx.fillStyle = lineGradient; 
ctx.fillRect(0, 0, 300, 300);


2. 水平(X)方向颜色渐进

// horizontal/X direction 
var lineGradient = ctx.createLinearGradient (0, 50, 200, 50); 
lineGradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); 
lineGradient.addColorStop(1, 'rgba(255, 255, 0, 1)'); 
ctx.fillStyle = lineGradient; 
ctx.fillRect(0, 0, 300, 300);


3.垂直与水平同时(XY方向)颜色渐进

// vertical and horizontal direction 
var lineGradient = ctx.createLinearGradient (0, 0, 200, 200); 
lineGradient.addColorStop(0, 'rgba(255, 0, 0, 1)'); 
lineGradient.addColorStop(1, 'rgba(255, 255, 0, 1)'); 
ctx.fillStyle = lineGradient; 
ctx.fillRect(0, 0, 300, 300);


二:透明度(Transparent)
Canvas中透明度支持分为全局与局部透明设置,全局透明度的设置可以通过设置
Context.globalAlpha来实现。局部透明度可以通过fillStyle设置颜色值中alpha值通道
来实现。两种方式代码如下:

// change global alpha value 
ctx.globalAlpha=0.5; 
ctx.fillRect(50,50,75,50);
// change fill style color's alphachannel 
ctx.fillStyle = 'rgba(225,225,225,0.5)'; 
ctx.fillRect(50,50,75,50);

两个效果是一样的。

三:照片透明渐进Mask效果

使用径向颜色渐变与透明度变化,实现在图像上的半透明面罩效果,脚本运行效果:

var myImage = document.createElement('img'); 
myImage.src = "../test.png"; 
myImage.onload = function() { 
ctx.drawImage(myImage, 80, 30, myImage.naturalWidth, myImage.naturalHeight); 
var radialGradient = ctx.createRadialGradient (canvas.width/2, canvas.height/2, 10, canvas.width/2, canvas.height/2, 200); 
radialGradient.addColorStop(0, 'rgba(247, 247, 247, 0)'); 
radialGradient.addColorStop(0.7, 'rgba(120, 120, 120, 0.5)'); 
radialGradient.addColorStop(0.9, 'rgba(0, 0, 0, 0.8)'); 
radialGradient.addColorStop(1, 'rgba(238, 238, 238, 1)'); 
ctx.beginPath(); 
ctx.arc(canvas.width/2, canvas.height/2, 300, 0, Math.PI * 2, true); 
ctx.closePath(); 
ctx.fillStyle = radialGradient; 
ctx.fill(); 
}

热心网友 时间:2022-05-12 02:04


尝试了一下   这样 可以

热心网友 时间:2022-05-12 03:22

吧透明度作为一个变量,和循环的变量i绑定,就可以了

热心网友 时间:2022-05-12 04:57

设置完透明度以后,cxt.restore()

热心网友 时间:2022-05-12 06:48

先画一张图,save一次,再画下一张行不?追问刚接触canvas,你是说这样吗:好像不行,还是一起改的!
..........
cxt.globalAlpha =1;
cxt.beginPath();
.........

cxt.closePath();

cxt.save();
..........

cxt.globalAlpha =0.1;
cxt.beginPath();
..........

cxt.closePath();

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
南南京到许昌的公共汽车票 南京去句容需要多久 南京到单县汽车票多少钱 八月十一号南京到高密的汽车票提前几天买 外省保育员证在广东能领到补贴吗 外省的保育员资格证可以在深圳申请补贴吗 广州保育员证在深圳可以申请从教津贴吗 广州的保育师证能在深圳用吗 很走心的干净短句,具有治愈能力的句子 社会很现实的哲理句子太经典了 做厨房柜,商家没给做台面加固怎么办 橱柜台面安装好后发觉不平咋做处理 橱柜台面不平如何补救 请问图中我的笔记本适合哪种型号的内存条? 下水道总堵怎么预防 今天是520怎么才能让qq小冰说出我爱你或我也是或真的吗,怎么让他说出? 别克昂科拉换手刹拉线 别克13版昂科拉换了中控屏可以插U盘 昂科拉主驾扶手怎么拆 昂科拉曲轴后油封怎么更换?变速箱怎么好下 鼻部的整形期应该多长时间? 这是什么类型的鼻子 垫鼻子手术能分期付款吗? 做鼻子首付需要什么条件? 缩小鼻子可以分期吗?哪好? 如果刚满18去整鼻子的话可以分的了期吗? 女子花两万多元贷款分期做的鼻子却歪了,涉事医美机构是何态度? 垫鼻子能分期付款吗? 做完鼻子可以分期买手机吗? 酒渣鼻各期有什么症状? 小型网吧的保洁员工作职责有哪些? 吃鸡星钻一赛季更新会掉到多少? 我的被人盗了,我冻结了,还能解冻吗? 抗氧化 美白 月全食为什么是暗红色的? 月全食为什么会变红 为什么月球在月食的时候呈红色? 为什么会出现红色月全食 为什么月亮是红色的? 月全食为什么叫月全食 日全食和月全食区别是什么? 什么是日全食?什么是月全食?产生的原因是什么? 红月亮是怎么形成的啊? 为什么会有红月亮啊? 红月亮什么原因 plc全称是什么? plc全称是什么 PLC是什么?全称是什么? plc的全称是什么? 明天去九江市我的健康吗会变吗? 我脸上有痣我不小心抓破了没有什么反应有没有危险