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

标签 html image canvas effects glow

我正在将 PNG 图像绘制到 HTML Canvas 上,我已经实现了一个过滤器系统,以允许在将图像数据写入 Canvas 之前对图像数据执行回旋过滤器。

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

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

在理想情况下,能够使用辅助发光纹理指定具有发光的图像区域会很棒。关于这两种情况的任何想法? :)

最佳答案

希望以下是您想要做的事情,我认为结果很好。所以我使用了来自 the article 的过滤器库代码,并且刚刚为库创建了一个新的辉光滤镜,因为他的代码一开始就做得很好。这是一个 Live Demo 显示实际的发光效果。

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

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 张图片。第一个是您希望发光出现的图像,第二个是应用于图像的实际发光蒙版。然后,您可以指定要执行多少模糊 channel ,这会使辉光更加突出,以及要执行多少辉光 channel ,从而将辉光添加到图像中。我对 Canvas 使用 lighter 全局合成,其中 alpha 混合了它。

This article是创建发光效果的非常棒的资源,它也是我获取图形的地方,以便根据他们的结果测试我的结果。

关于html - HTML Canvas 上的发光效果,可能使用卷积核/矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359189/

相关文章:

javascript - Canvas 图像展平 - 组合 imageData

javascript - HTML5 视频无法在 Chrome 中播放

html - ngfor 中用于 Angular Material 的图像绑定(bind)

javascript - 根据参数值使用Jquery删除类

image - 使用 Visual Basic 显示随机图像

javascript - Canvas - 圆弧突然消失

html - 3 列 - 带溢流元件的中心列流体

android - 将图像大小调整为精确的文件大小

r - 在R中覆盖2张具有透明度的图像

javascript - 使 Canvas 具有形状响应