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

相关推荐
晓晓莺歌几秒前
vue3某一个路由切换,导致所有路由页面均变成空白页
前端·vue.js
2601_9498095919 分钟前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
Up九五小庞30 分钟前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
摘星编程1 小时前
React Native + OpenHarmony:UniversalLink通用链接
javascript·react native·react.js
qq_177767371 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88211 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
程序员清洒3 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6663 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
天人合一peng4 小时前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
会飞的战斗鸡4 小时前
JS中的链表(含leetcode例题)
javascript·leetcode·链表