使用 CamanJS 开发图像编辑工具:探索图层、混合模式和事件处理

使用 camanjs 开发图像编辑工具:探索图层、混合模式和事件处理

在上一教程中,您学习了如何使用 CamanJS 创建图像编辑器,该编辑器可以对图像应用对比度、亮度和噪声等基本滤镜。 CamanJS 还有一些其他内置滤镜,如怀旧、针孔、日出等,我们直接将其应用到图像上。

在本教程中,我们将介绍该库的一些更高级的功能,例如图层、混合模式和事件。

CamanJS 中的层

在第一个教程中,我们仅使用包含图像的单个图层。我们应用的所有过滤器仅操纵该主层。 CamanJS 允许您创建多个图层,以便您能够以更复杂的方式编辑图像。您可以创建嵌套图层,但它们将始终像堆栈一样应用到其父图层上。

每当您创建新图层并将其应用到父图层时,使用的默认混合模式将为 normal。您可以使用 newLayer() 方法在画布上创建一个新图层。当您创建新图层时,您还可以传递一个回调函数,如果您打算操作图层,该函数将很有用。

此函数可用于许多任务,例如使用 setBlendingMode() 方法设置新图层的混合模式。同样,您可以使用 opacity() 方法控制新图层的不透明度。

您创建的任何新图层都可以使用 fillColor() 方法填充纯色。您还可以使用 copyParent() 方法将父层的内容复制到新层。我们在上一个教程中学到的所有过滤器也可以应用于我们正在创建的新图层。例如,您可以使用 this.filter.brightness(10) 增加新创建图层的亮度。

您还可以选择加载图层中的任何其他图像并将其覆盖在父级上,而不是复制父级或使用纯色填充图层。就像主图像一样,您也可以对叠加图像应用不同的滤镜。

在下面的代码片段中,我们将一个单击事件处理程序附加到三个按钮,这三个按钮将分别用纯色、父图层和覆盖图像填充新图层。

$('#orange-btn').on('click', function (e) {    Caman("#canvas", function () {        this.newLayer(function () {            this.opacity(50);            this.fillColor('#ff9900');        });        this.render();    });});$('#parent-btn').on('click', function (e) {    Caman("#canvas", function () {        this.newLayer(function () {            this.opacity(50);            this.copyParent();            this.filter.brightness(20);        });        this.render();    });});$('#overlay-btn').on('click', function (e) {    var oImg = new Image();    oImg.src = "trees.png";        Caman("#canvas", function () {        this.newLayer(function () {            this.opacity(50);            this.overlayImage(oImg);            this.filter.brightness(20);        });        this.render();    });});

CamanJS 中的混​​合模式

在上一节中,我们将添加到画布的任何新图层的不透明度保持在 100 以下。这样做是因为新图层将完全隐藏旧图层。当您将一层放置在另一层上时,CamanJS 允许您指定混合模式,该模式决定放置后的最终结果。混合模式默认设置为 normal 。

这意味着您在画布上添加的任何新图层都会使其下面的图层不可见。该库共有十种混合模式。这些是 正常、乘法、屏幕、覆盖、差异、添加、排除、softLight、排除 和暗化。

正如我之前提到的,normal 混合模式将最终颜色设置为等于新图层的颜色。 multiply 混合模式通过将各个通道相乘,然后将结果除以 255 来确定像素的最终颜色。 multiply 和 addition 的区别混合模式的工作方式类似,但它们会减去和添加通道。

darken 混合模式将像素的最终颜色设置为等于各个颜色通道的最低值。 lighten 混合模式将像素的最终颜色设置为等于各个颜色通道的最高值。 exclusion 混合模式与 difference 有点相似,但它将对比度设置为较低的值。在 screen 混合模式的情况下,最终颜色是通过反转每层的颜色、相乘,然后再次反转结果来获得的。

如果底部颜色较深,则 overlay 混合模式的作用类似于 multiply;如果底部颜色较浅,则其作用类似于 screen。

如果您希望不同图层中的颜色以不同的方式交互,CamanJS 还允许您定义自己的混合模式。我们将在本系列的下一个教程中介绍这一点。

以下是在图像上应用不同混合模式的 JavaScript 代码:

图酷AI 图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

图酷AI 57 查看详情 图酷AI

$('#multiply-btn').on('click', function (e) {    hexColor = $("#hex-color").val();    Caman("#canvas", function () {        this.revert(false);        this.newLayer(function () {            this.fillColor(hexColor);            this.setBlendingMode('multiply');        });        this.render();    });});$('#screen-btn').on('click', function (e) {    hexColor = $("#hex-color").val();    Caman("#canvas", function () {        this.revert(false);        this.newLayer(function () {            this.fillColor(hexColor);            this.setBlendingMode('screen');        });        this.render();    });});

在上面的代码片段中,我们从输入字段获取十六进制颜色值。然后将该颜色应用到新图层上。您可以编写代码以类似的方式应用其他混合模式。

尝试在输入字段中指定您选择的颜色,然后通过单击相应的按钮应用任何混合模式。在示例中,我已将混合模式应用于纯色,但您也可以将它们应用于上一节中的重叠图像。

CamanJS 中的事件

如果您在第一个教程或第二个教程的演示中上传了任何大图像,您可能会注意到,任何应用的滤镜或混合模式的结果在很长一段时间后变得明显。

大图像具有大量像素,在应用特定混合模式后计算每个像素的不同通道的最终值可能非常耗时。例如,当对尺寸为 1920*1080 的图像应用 multiply 混合模式时,设备必须执行超过 600 万次乘法和除法。

在这种情况下,您可以使用事件向用户提供有关滤镜或混合模式进度的一些指示。 CamanJS 有五个不同的事件,可用于在不同阶段执行特定的回调函数。这五个事件是 processStart、processComplete、renderFinished、blockStarted 和 blockFinished。

processStart 和 processComplete 事件在单个过滤器开始或完成其渲染过程后触发。当您指定的所有过滤器都已应用于图像时,库将触发 renderFinished 事件。

CamanJS 在开始操作之前将大图像分成块。 blockStarted 和 blockFinished 事件在库处理完图像的各个块后触发。

在我们的示例中,我们将仅使用 processStart 和 renderFinished 事件来通知用户图像编辑操作的进度。

Caman.Event.listen("processStart", function (process) {    $(".process-message").text('Applying ' + process.name);});Caman.Event.listen("renderFinished", function () {    $(".process-message").text("Done!");});

通过 processStart 和 processFinish 事件,您可以访问当前在图像上运行的进程的名称。另一方面,blockStarted 和 blockFinished 事件使您可以访问块总数、当前正在处理的块以及已完成块的数量等信息。

尝试单击下面演示中的任何按钮,您将在画布下方的区域中看到当前操作图像的进程的名称。

最终想法

本系列的第一个教程向您展示了如何使用 CamanJS 库中的内置滤镜创建基本图像编辑器。本教程向您展示了如何处理多个图层以及如何对每个图层单独应用不同的滤镜和混合模式。

由于大图像的图像编辑过程可能需要一段时间,因此我们还学习了如何向用户表明图像编辑器实际上正在处理图像而不是闲置。

在本系列的下一个也是最后一个教程中,您将学习如何在 CamanJS 中创建自己的混合模式和滤镜。如果您对本教程有任何疑问,请随时在评论中告诉我。

以上就是使用 CamanJS 开发图像编辑工具:探索图层、混合模式和事件处理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/532004.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP框架版本更新对开发者学习和技能的影响
上一篇 2025年11月9日 11:06:19
java如何调用其他类中的方法
下一篇 2025年11月9日 11:06:27

相关推荐

  • 讯景RX 9060 XT更换三星显存:温度、功耗、噪音全秒杀SK海力士

    讯景RX 9060 XT更换三星显存:温度、功耗、噪音全秒杀SK海力士讯景RX 9060 XT更换三星显存:温度、功耗、噪音全秒杀SK海力士讯景RX 9060 XT更换三星显存:温度、功耗、噪音全秒杀SK海力士讯景RX 9060 XT更换三星显存:温度、功耗、噪音全秒杀SK海力士

    9月7日消息,讯景官方宣布,其rx 9060 xt v3系列显卡已将显存升级为三星gddr6颗粒,在温度、功耗和噪音表现上全面领先于此前采用的sk海力士gddr6显存。 此次更新的型号涵盖RX 9060 XT海外版Pro V3(黑/白)与RX 9060 XT海外版290 V3(黑/白),售价分别为3…

    2026年10月6日 • 用户投稿
    500
  • 哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址

    哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址哔哩哔哩在线视频入口-哔哩哔哩B站免费流媒体地址

    哔哩哔哩在线视频入口是bilibili.com/,该平台汇聚原创短视频、动画、音乐演出和纪录片等内容,支持弹幕互动、兴趣小组交流及创作者互动,提供多端适配与跨设备同步功能。 直接观看“☞☞☞☞☞点击哔哩哔哩在线视频入口☜☜☜☜☜”; 直接观看“☞☞☞☞☞点击哔哩哔哩B站免费流媒体地址☜☜☜☜☜”; …

    2026年10月6日 • 用户投稿
    000
  • win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出

    win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出win11无法弹出U盘或移动硬盘怎么办_解决Win11设备正在使用无法弹出

    1、重启Windows资源管理器可释放U盘占用;2、使用资源监视器查找并结束访问设备的进程;3、通过事件查看器定位阻止弹出的PID并结束对应进程;4、更新USB驱动确保硬件通信正常;5、禁用快速启动避免系统未完全释放设备;6、用DiskPart命令移除盘符强制解除逻辑映射,从而安全移除U盘或移动硬盘…

    2026年10月6日 • 用户投稿
    000
  • linux操作之重定向问题怎么解决

    一、概述 (1)重定向命令列表 命令 说明 command > file将输出重定向到 filecommand > file将输出以追加的方式重定向到 filen > file将文件描述符为 n 的文件重定向到 filen >> file将文件描述符为 n 的文件以追加…

    2026年10月6日
    1000
  • 奥特曼超时空英雄超限因子获取途径

    奥特曼超时空英雄超限因子获取途径奥特曼超时空英雄超限因子获取途径奥特曼超时空英雄超限因子获取途径奥特曼超时空英雄超限因子获取途径

    在奥特曼超时空英雄这款游戏中,超限因子是用于提升潜能档案的重要道具,不少玩家对如何获取超限因子感到困惑。以下是关于奥特曼超时空英雄中超限因子获取方式的详细分享,有需要的玩家可以参考了解。 奥特曼超时空英雄超限因子怎么获得 试炼商店 可通过消耗荣耀币在试炼商店中兑换超限因子。荣耀币主要通过参与等离子试…

    2026年10月6日 • 用户投稿
    000
  • vivo手机怎么查正品

    vivo手机怎么查正品vivo手机怎么查正品vivo手机怎么查正品vivo手机怎么查正品

    vivo手机真伪查询方式:1.查看包装盒防伪标签及刮出16位防伪码;2.官网输入防伪码或IMEI码验证;3.拨打官方客服热线提供防伪码或IMEI查询;4.使用第三方验证软件扫描二维码或输入IMEI验证。其中,官网验证和客服电话查询最为准确可靠。 vivo手机查询真伪方法 如何查询vivo手机真伪? …

    2026年10月6日 • 用户投稿
    100
  • Composer的依赖解析算法(SAT Solver)是如何工作的?

    Composer的依赖解析算法(SAT Solver)是如何工作的?Composer的依赖解析算法(SAT Solver)是如何工作的?Composer的依赖解析算法(SAT Solver)是如何工作的?Composer的依赖解析算法(SAT Solver)是如何工作的?

    SAT求解是判断布尔公式可满足性的逻辑问题,Composer将其用于依赖解析:将包版本视为布尔变量,依赖冲突等规则转为逻辑子句,最终求解一组版本组合使所有条件成立。 Composer 使用一种基于 SAT(可满足性问题)求解的算法来解析项目依赖关系。它的核心目标是:在众多包版本及其复杂的依赖约束中,…

    2026年10月6日 • 用户投稿
    100
  • 保时捷女销冠称被合成AI不雅视频 本人:坚决追究涉案人员的法律责任

    10月11日,据媒体报道,青岛保时捷销售中心员工牟女士近日公开表示,自己遭遇了由ai技术恶意生成的虚假视频和不当内容的网络诽谤与侮辱,目前已向警方报案,并决心追究相关责任人的民事及刑事责任。 在接受采访时,牟女士透露,此前也曾遭遇过“黄谣”攻击,但此次情况更为严重。相关不实视频持续扩散,浏览量或已超…

    2026年10月6日
    000
  • 南昌欧菲光电入选“2025年江西省先进级智能工厂名单”

    南昌欧菲光电入选“2025年江西省先进级智能工厂名单”南昌欧菲光电入选“2025年江西省先进级智能工厂名单”南昌欧菲光电入选“2025年江西省先进级智能工厂名单”南昌欧菲光电入选“2025年江西省先进级智能工厂名单”

    近期,江西省工业和信息化厅公布了“2025年江西省先进级智能工厂名单”。经过各设区市工信主管部门的推荐、专家评审以及公示环节,共有186家企业成功入选。在这份名单中,欧菲光集团旗下的南昌欧菲光电技术有限公司脱颖而出,其在摄像头模组智能制造领域的创新成果得到了政府的高度认可。 ☞☞☞AI 智能聊天, …

    2026年10月6日 • 用户投稿
    000
  • google浏览器手机版 google浏览器手机版最新入口

    google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口google浏览器手机版 google浏览器手机版最新入口

    google浏览器手机版最新入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来google浏览器手机版最新入口,感兴趣的网友一起随小编来瞧瞧吧! https://www.google.com/chrome/ 界面简洁直观 1、启动浏览器后可以看到干净的主屏幕,没有过多复杂的元素堆砌,搜索…

    2026年10月6日 • 用户投稿
    000
  • linux下静态链接库和动态链接库的区别有哪些

    linux下静态链接库和动态链接库的区别有哪些linux下静态链接库和动态链接库的区别有哪些linux下静态链接库和动态链接库的区别有哪些linux下静态链接库和动态链接库的区别有哪些

    区别:1、动态库的后缀为“.so”,静态库的后缀为“.a”。如果动态函数库发生变化,程序不需要重新编译,但如果静态函数库变化了,则必须重新编译程序。3、相对于静态库,动态库在编译的时候并没有被编译进目标代码中,用户的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较…

    2026年10月6日 • 用户投稿
    000
  • 猎梦宿舍如何获得开朗的网友 开朗的网友皮肤解锁方法

    猎梦宿舍如何获得开朗的网友 开朗的网友皮肤解锁方法猎梦宿舍如何获得开朗的网友 开朗的网友皮肤解锁方法猎梦宿舍如何获得开朗的网友 开朗的网友皮肤解锁方法猎梦宿舍如何获得开朗的网友 开朗的网友皮肤解锁方法

    猎梦宿舍开朗的网友皮肤如何获取?在这款游戏中,玩家可以使用多种皮肤来改变主角的形象。其中,“开朗的网友”是一款风格幽默、广受喜爱的趣味皮肤。许多玩家都想知道如何正确解锁它。接下来,请跟随小编提供的信息了解具体方法。 猎梦宿舍开朗的网友皮肤解锁方式 进入游戏后,选择皮肤界面。 选择位于中间的“紫霞仙子…

    2026年10月6日 • 用户投稿
    000
  • Composer在Mac上通过Homebrew如何安装?

    Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?

    确认Homebrew已安装,若未安装需先执行官方命令;2. 使用brew install php安装PHP并验证版本;3. 运行brew install composer安装工具;4. 执行composer –version确认安装成功,Homebrew自动处理依赖与路径配置。 在Mac…

    2026年10月6日 • 用户投稿
    300
  • 近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍

    近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍近20人假冒国安闯入公园挖地寻宝是怎么回事?详情介绍

    今天,国家安全部曝光一起不法分子假冒国安的荒诞闹剧:在某南方小城,一公园大门被一群不速之客急促叩响,几名身着迷彩服、衣后印着“执勤”字样的人员闯入保安室。他们自称是国家安全局工作人员,正在执行一项重要任务,需“接管”公园至次日上午。值班保安还没来得及反应,就被集中控制,并被没收手机,失去了与外界的联…

    2026年10月6日 • 用户投稿
    200
  • 基于自定义Comparator创建Comparator的教程

    基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程

    本文旨在解决如何基于已有的 Comparator 创建用于比较自定义类型 IntIdx 的 Comparator。通过使用 Comparator.comparing(Function, Comparator) 方法,可以优雅地将外部传入的比较器应用于 IntIdx 对象的特定属性,并与其他比较规则组…

    2026年10月6日 • 用户投稿
    100
  • win11电脑投屏到电视的方法_Win11无线投屏功能使用教程

    win11电脑投屏到电视的方法_Win11无线投屏功能使用教程win11电脑投屏到电视的方法_Win11无线投屏功能使用教程win11电脑投屏到电视的方法_Win11无线投屏功能使用教程win11电脑投屏到电视的方法_Win11无线投屏功能使用教程

    可通过无线或有线方式将Windows 11屏幕投屏至电视,具体包括:1. 使用Miracast无线投屏,需电视支持并开启该功能,电脑按Win+K连接;2. 通过HDMI线缆有线连接,稳定高清,需切换电视信号源;3. 使用无线显示适配器,适用于不支持Miracast的电视;4. 借助乐播投屏等第三方软…

    2026年10月6日 • 用户投稿
    300
  • 如何使用MySQL中的TIME_FORMAT函数将时间格式化为特定的字符串

    如何使用mysql中的time_format函数将时间格式化为特定的字符串 MySQL是一个广泛使用的关系型数据库管理系统,它提供了丰富的函数和操作符来处理数据。在MySQL中,有一个非常有用的函数,即TIME_FORMAT函数,可以将时间按照指定的格式进行格式化并返回一个字符串。 TIME_FOR…

    2026年10月6日
    000
  • 悟空浏览器广告怎么拦截_悟空浏览器内置广告拦截功能详解

    悟空浏览器广告怎么拦截_悟空浏览器内置广告拦截功能详解悟空浏览器广告怎么拦截_悟空浏览器内置广告拦截功能详解悟空浏览器广告怎么拦截_悟空浏览器内置广告拦截功能详解悟空浏览器广告怎么拦截_悟空浏览器内置广告拦截功能详解

    想让悟空浏览器更清爽?关键在于用好它自带的广告过滤功能。下面这些设置能帮你有效减少网页广告、推送通知和个性化推荐的干扰。 开启H5广告过滤 这是拦截网页内广告的核心功能,能屏蔽大部分弹窗、贴片等H5格式的广告内容。 打开悟空浏览器,点击底部菜单栏的“三”图标进入菜单 选择“设置”(齿轮图标) 找到并…

    2026年10月6日 • 用户投稿
    000
  • vivo手机黑屏开不开机怎么办

    vivo手机黑屏开不开机怎么办vivo手机黑屏开不开机怎么办vivo手机黑屏开不开机怎么办vivo手机黑屏开不开机怎么办

    vivo 手机黑屏开不开机,可尝试以下方法:检查充电状态并充电。强制重启:同时按住电源键和音量增大键约 10 秒。进入 Recovery 模式并清除缓存分区。恢复出厂设置(需备份数据)。联系 vivo 客服或去授权服务中心。 vivo 手机黑屏开不开机怎么办? 当你的 vivo 手机黑屏且无法开机时…

    2026年10月6日 • 用户投稿
    000
  • 抖音精选加联盟是什么?什么叫精选联盟

    老铁们,大家好,相信还有很多朋友对于%ignore_a_1%精选加联盟是什么和什么叫精选联盟的相关问题不太懂,没关系,今天就由我来为大家分享分享抖音精选加联盟是什么以及什么叫精选联盟的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧! 短视频平台如雨后春笋般涌现。抖音作为其中的佼佼者,凭…

    2026年10月6日
    000

发表回复

登录后才能评论
关注微信