Canvas之图像合成

Canvas之图像合成

js 复制代码
ctx.beginPath();
ctx.fillStyle = '#f00';
ctx.fillRect(50, 50, 200, 200);

ctx.globalCompositeOperation = 'xor';

ctx.beginPath();
ctx.fillStyle = '#0f0';
ctx.fillRect(150, 150, 200, 200);

我们可以将前后两个图像进行合成。通过设置 ctx.globalCompositeOperation 可以选择图片合成的方式,这里指的是路径合成。设置时需要放在前后两个图形中间。

路径合成也是形状合成。有 source-over,in,out,atop ,分别为重叠部分展示后面,重叠后面部分,不重叠后面部分,前面重叠后面,destination 也有类似的四个,只是将后面换为前面为中心。copy 展示后面,xor 异或,展示前后两个不重叠的部分。

js 复制代码
ctx.beginPath();
ctx.fillStyle = '#f00';
ctx.fillRect(50, 50, 200, 200);

ctx.globalCompositeOperation = 'lighten';

ctx.beginPath();
ctx.fillStyle = '#0f0';
ctx.fillRect(150, 150, 200, 200);

不仅是形状的混合,颜色也可以混合。和之前的使用方法一样。lighter 是将两个相同区域的像素相加,multiply 是将两个像素进行计算,亮色的保持原色,暗色的进行暗化处理,所以整体偏暗。screen 是将暗色保持原色,亮色的进行亮化处理,所以整体偏亮。darken 没有进行计算,直接取两个像素中最暗的像素,整体偏暗,lighten 也没有进行计算,直接取两个像素中最亮的像素,整体偏亮。

如果是两个图片,ctx.globalCompositeOperation 要写在前一个图片的加载事件最后或者是后一个图片加载事件的前面,不能像以前写在加载事件之外。

相关推荐
jiayong23几秒前
0基础学习VUE3 第 1 课:项目启动流程
前端·vue.js·学习
今天又在摸鱼3 分钟前
学习vue前必要的js语法
前端·vue.js·学习
小小张自由—>张有博11 分钟前
【深度解析】从 claude 命令到 cli.js 的完整执行链路
开发语言·javascript·ecmascript
大家的林语冰32 分钟前
TypeScript 6 官宣,JS “最后之舞“,版本升级踩雷指南
前端·javascript·typescript
英俊潇洒美少年34 分钟前
react useDeferredvalue和useTransition的讲解
前端·react.js·前端框架
爱学习的程序媛38 分钟前
【WebRTC】呼叫中心前端技术选型:SIP.js vs JsSIP vs Verto
前端·javascript·typescript·音视频·webrtc·实时音视频·web
Amumu121381 小时前
Js: ES新特性(一)
开发语言·前端·javascript
scofield_gyb1 小时前
Redis 6.2.7安装配置
前端·数据库·redis
木斯佳1 小时前
前端八股文面经大全: 蓝色光标前端一面OC(2026-03-23)·面经深度解析
前端·面试·vue·校招·js·面经
2301_792580001 小时前
Pyrocko + PSGRN/PSCMP小问题
前端