HTML5 中怎么用 globalCompositeOperation 设置图层混合与遮罩模式

星辰君_4391

星辰君_4391

2026-10-08

417人浏览

原创

html5 canvas 的 globalcompositeoperation 是像素级裁剪+覆盖逻辑,非颜色混合;常用模式如 source-over、destination-in 等跨浏览器稳定,遮罩推荐 destination-in(显形)或 source-in(贴图),clip() 更轻量高效。

html5 中怎么用 globalcompositeoperation 设置图层混合与遮罩模式

HTML5 Canvas 中的 globalCompositeOperation 不是“颜色混合”,而是像素级的**裁剪+覆盖逻辑**:它决定新绘制的内容在哪些位置显示、保留或清除,而不是像 Photoshop 那样计算 RGB 值。用对了,能实现遮罩、擦除、贴图裁剪、加色融合等效果;用错了,图直接消失或反向生效——问题往往出在主语(source vs destination)和绘制顺序上。

常用混合与遮罩模式怎么选

以下值跨浏览器支持稳定(Chrome/Firefox/Safari 均可用),适合生产环境:

Wechat HTML Publisher
Wechat HTML Publisher

直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。

下载
  • source-over:默认模式,新图形画在旧图形上方,日常绘制就用它
  • destination-over:新图形画在旧图形下方,适合做底纹或背景层
  • source-in:只在旧图形有不透明像素的区域显示新图形 → “把图装进旧形状里”(如图片扣进圆形路径)
  • destination-in:只保留旧图形中与新图形重叠且不透明的部分 → “用新图形当蒙版抠旧图”(如文字形状露出底图)
  • destination-out:擦除旧图形中与新图形重叠的不透明像素 → 真·橡皮擦,适合刮刮乐、镂空动画
  • lighter:RGB 值相加,实现加色混合(光晕、粒子融合),所有主流浏览器都支持
  • multiply 和 screen:正片叠底、滤色效果可用,但 overlay、hard-light 等高级模式在 Safari 中仍不支持

遮罩效果的两种可靠实现方式

遮罩不是靠 DOM 层叠,必须在同一 canvas 上先后绘制,并严格控制顺序:

  • destination-in(推荐用于“显形”类遮罩):先 drawImage(img, 0, 0) 绘制原图,再设 globalCompositeOperation = 'destination-in',接着绘制遮罩图形(如圆、文字、渐变矩形),最后 fill() 或 stroke()。结果:只有遮罩图形覆盖的区域保留原图像素
  • source-in(推荐用于“贴图”类遮罩):先用 fill() 或 fillText() 绘制一个不透明遮罩形状(比如实心圆),再设 globalCompositeOperation = 'source-in',最后 drawImage(img)。结果:图像只出现在遮罩形状内部
  • 注意:如果遮罩图形本身是半透明(如抗锯齿边缘或低 alpha 填充),source-in 可能漏出边缘;此时建议改用 clip() 方案,更干净可控

关键操作细节别踩坑

  • 该属性只对后续绘制操作生效,先画图再设它,完全没反应
  • clearRect() 是画一个全透明黑色矩形,它不参与合成运算,也不会被 destination-out 擦除
  • 路径必须调用 fill() 或 stroke() 才真正成为“已有内容”,仅 beginPath() + arc() 不会起作用
  • 使用 drawImage() 时,遮罩图形和图像坐标要对齐,否则裁剪区域偏移
  • 图像必须加载完成(监听 img.onload)再绘制,否则 canvas 显示空白
  • 高 DPI 屏幕下,记得设置 canvas.width/canvas.height 为物理像素尺寸,并用 CSS 缩放显示,避免模糊

比 globalCompositeOperation 更轻量的替代方案:clip()

如果遮罩形状固定(如圆、椭圆、SVG 路径),clip() 更高效、语义更清晰,且不受像素透明度影响:

  • 先 beginPath() + 构建路径(arc()、rect()、lineTo() 等)
  • 立即调用 clip()(此操作不可逆,后续所有绘图自动受限)
  • 再 drawImage() 或 fillRect(),图像天然被裁剪
  • 如需恢复全画布绘制,用 ctx.save() / ctx.restore() 包裹 clip 操作

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5003

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6090

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5618

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

803

5

html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

5695

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3232

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2910

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2939

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 220人学习