HTML Canvas 上的发光效果,可能使用卷积核/矩阵

2024-01-10

我正在将 PNG 图像绘制到 HTML 画布上,并且实现了一个过滤器系统,以允许在将图像数据传输到画布之前对图像数据执行卷积过滤器。

有谁知道如何使用卷积核/矩阵创建发光效果(我不确定术语是什么,但我正在谈论这些:http://www.html5rocks.com/en/tutorials/canvas/imagefilters/ http://www.html5rocks.com/en/tutorials/canvas/imagefilters/) 或通过其他方式,例如使用 globalCompositeOperation (https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html)?

我知道您可以从低不透明度和缩放图像开始,然后增加不透明度,同时稍微缩小图像。这可以创建一种发光效果,但仅限于图像边缘。

在理想的世界中,如果能够使用辅助发光纹理指定具有发光的图像区域,那就太好了。对这两种情况有什么想法吗? :)


希望以下内容符合您想要做的事情,我认为结果很好。所以我使用了过滤器库代码文章 http://www.html5rocks.com/en/tutorials/canvas/imagefilters/,并且刚刚为库创建了一个新的发光滤镜,因为他的代码一开始就做得很好。这里有一个现场演示 http://somethinghitme.com/projects/glow/显示活动中的发光效果。

这是您需要添加到库中的过滤器代码

Filters.glow = function(pixels, passes, image, glowPasses){
        for(var i=0; i < passes; i++){  
            pixels = Filters.convolute(pixels, 
                [1/9,  1/9,  1/9,
                1/9,  1/9,  1/9,
                1/9,  1/9,  1/9 ]);
        }
        
        var tempCanvas = document.createElement("canvas"),
            glowCanvas = document.createElement("canvas"),
            tCtx = tempCanvas.getContext("2d"),
            gCtx = glowCanvas.getContext("2d");
        
        tempCanvas.width = glowCanvas.width = pixels.width;
        tempCanvas.height = tempCanvas.height = pixels.height;
        
        tCtx.putImageData(pixels, 0, 0);
        gCtx.drawImage(image, 0, 0);

        gCtx.globalCompositeOperation = "lighter";

        for(i = 0; i < glowPasses; i++){
            gCtx.drawImage(tempCanvas,0,0);
        }
        
        return Filters.getPixels(glowCanvas);
    }

这就是您使用上述过滤器的方式。

var glowImage = document.images[1],
    glowMask = document.images[0],
    c = document.getElementById("canvas"),
    ctx = c.getContext("2d");

window.onload = function() {
    var pData = Filters.filterImage(Filters.glow, glowImage, 5, glowMask, 2);
    c.width = pData.width;
    c.height = pData.height;
    ctx.putImageData(pData, 0, 0);
}

您需要为其提供 2 张图像。第一个是您希望出现辉光的图像,第二个是应用于图像的实际辉光蒙版。然后,您可以指定要执行多少个模糊通道,这会使发光更加突出,以及要执行多少个发光通道,这会将发光添加到图像中。我用lighter阿尔法混合画布的全局合成。

本文 https://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch21.html是创建发光效果的非常好的资源,也是我获得图形的地方,以便根据他们的结果测试我的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML Canvas 上的发光效果,可能使用卷积核/矩阵 的相关文章

随机推荐

  • 使用 Google 脚本将图像保存到电子表格

    我正在尝试使用 jSignature 将签名板添加到 Google 表格 我添加了一个记录签名的对话框 如下所示 Code gs function showDialog var html HtmlService createHtmlOutp
  • 无法通过android NDK(camera2 api)获取相机列表

    尝试使用 Qt5 12 3 和 android ndk 构建应用程序 但无法通过 ACameraManager getCameraIdList 获取相机列表 手机 索尼 xperia XA1 Ultra Qt 5 12 3 NDK r19c
  • “ngserve”命令适合生产吗?

    我正在使用 Angular 7 构建一个小项目 当你运行时 ng serve NodeJS 服务器启动来处理请求 每个请求是否会阻塞直到处理完成 我们正在尝试评估在生产中使用它与使用更传统的应用程序服务器相比有多有效 Run build p
  • Kotlin:对以函数作为参数的函数进行单元测试

    我有一个从存储库中检索项目列表的函数 我没有使用常规回调 而是传入一个函数并使用结果调用它 但是如何对这种功能进行单元测试呢 是否有某种方法可以验证传入的函数是否正在被调用 或者我应该重构并使用常规回调并使用模拟回调接口对其进行测试 My
  • 如何从 HTML 中获取所有 标记之间的数组中的文本?

    我想在所有之间获取数组中的文本 span span 来自 HTML 的标签 我尝试过使用此代码 但它只返回一次 preg match span lt span gt is row tbl highlighted icon content m
  • 用于分配分片索引的 Zookeeper

    我在网上看到过一些关于使用 Zookeeper 在服务器上线时为其分配分片编号的帖子 假设您正在跨集群对数据进行分片 但我一生都找不到如何执行此操作的 Java 代码示例 有人已经可以使用这个了吗 谢谢 跨集群分片数据有很多细节 例如复制和
  • Numpy 数组:序列太大

    我有一个大小的数组11称为 波长 和更大的尺寸数组n称为 MN 而 模型 是一个m by n array 我正在这样做 for i in xrange 10 len wavelength 2 y np empty model MN i fl
  • 如何使用“chosen.js”插件在 MVC 3 中实现多重选择

    如何实施chosen http harvesthq github io chosen MVC 3 的插件 对于这种类型的输出 这是我的代码 如何使 selected js 与 javascript MVC 一起工作 这是我的下拉列表的代码
  • 如何覆盖android中的操作栏后退按钮?

    我想自定义操作栏中的活动后退按钮 而不是硬键后退按钮 我已经覆盖了onBackPressed 方法 它适用于我的模拟器后退按钮 但不适用于操作栏后退按钮 我希望它能通过操作栏发生 我怎样才能做到这一点 这是我的代码 Override pub
  • ServiceWorker更新后如何刷新页面?

    我查阅了很多有关 Service Workers 的资源 更新您的 ServiceWorker https jakearchibald com 2014 using serviceworker today updating your ser
  • 如何测试 URL 字符串是绝对字符串还是相对字符串?

    如果 URL 是 Javascript 或 jQuery 中的相对路径或绝对路径 如何测试它 我想根据传入的 URL 是本地路径还是外部路径进行相应处理 if urlString starts with http or https do t
  • 如何使用 bash 运行 `mkdir -m -p`?

    我想要mkdir as site1 www site1 log site2 www site2 log site3 www site3 log 这些文件夹的权限是700 然后我在 Bash shell 中尝试了脚本 如下所示 sites a
  • 为什么我无法注销 django 用户身份验证?

    我正在使用 django contrib auth 用户管理系统 因此 我将注册 插入到用户表 模型中 并从 django contrib auth views login 进行登录 以便我可以登录 但是 我无法使用 django cont
  • 类方法上的 functools.partial

    我试图使用另一个更通用的类方法定义一些类方法 如下所示 class RGB object def init self red blue green super RGB self init self red red self blue blu
  • 我什么时候应该为 Map 键创建一个类?

    我正在使用 Java 6 假设我有一个类 我想将其实例保存到地图中 后来我想仅使用 关键字段 来检索实例 为了简洁起见 我将忽略字段修饰符 getter 和 setter class A String field1 String field
  • 如何在 Url.Content 中包含 MVC Razor 变量?

    使用 MVC 3 Razor 如何在调用中指定变量 Url Content Example var myVar Request QueryString foo a href Url Content a bar myvar gt click
  • 程序在其他 Windows 机器上无法正常运行

    我的应用程序遇到问题 我试图获取它运行的系统的所有网络配置 最终目标是找到优先级最高的MAC地址 当我使用 QtCreator 运行代码时 代码运行正常并且可以工作 当我创建包含 dll 文件和 exe 文件的文件夹时 代码也运行正常 但问
  • 无法使用 API Gateway 运行 AWS Lambda 函数

    我创建了一个简单的 python 3 7 lambda 函数 import json import boto3 s3 boto3 client s3 def lambda handler event context bucket nubi
  • 如何按 R 数据表中的特定列分组后选择行的子集[重复]

    这个问题在这里已经有答案了 我想在按 R 数据表中的特定列分组后根据条件选择行的子集 以Mtcars数据为例 dt mtcars lt as data table mtcars dt mtcars N by hp hp N 1 110 3
  • HTML Canvas 上的发光效果,可能使用卷积核/矩阵

    我正在将 PNG 图像绘制到 HTML 画布上 并且实现了一个过滤器系统 以允许在将图像数据传输到画布之前对图像数据执行卷积过滤器 有谁知道如何使用卷积核 矩阵创建发光效果 我不确定术语是什么 但我正在谈论这些 http www html5