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

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落3 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙4 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow5 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上6 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
এ慕ོ冬℘゜6 小时前
navigator 导航对象 BOM制作方法
javascript
星栈6 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香6 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest6 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士7 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见8 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain