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 要写在前一个图片的加载事件最后或者是后一个图片加载事件的前面,不能像以前写在加载事件之外。

相关推荐
LIUENG3 分钟前
Vue3 响应式原理
前端·vue.js
讨厌吃蛋黄酥7 分钟前
前端居中九种方式血泪史:面试官最爱问的送命题,我一次性整明白!
前端·css
龙在天10 分钟前
🤩 用Babel自动埋点,原来这么简单!
前端
Hierifer10 分钟前
跨端实现之网络库拦截
前端
随笔记12 分钟前
react-router里的两种路由方式有什么不同
前端·react.js
前端李二牛12 分钟前
异步任务并发控制
前端·javascript
你也向往长安城吗33 分钟前
推荐一个三维导航库:three-pathfinding-3d
javascript·算法
imLix35 分钟前
RunLoop 实现原理
前端·ios
wayman_he_何大民40 分钟前
初始机器学习算法 - 关联分析
前端·人工智能
karrigan43 分钟前
async/await 的优雅外衣下:Generator 的核心原理与 JavaScript 执行引擎的精细管理
javascript