javascript - 捕获/保存/导出应用了 CSS 滤镜效果的图像

标签 javascript jquery css

我正在使用工具制作一个使用 CSS3 滤镜效果(饱和度、棕褐色、对比度等)的简单图片编辑器

制作图片编辑器是容易的部分,但是是否可以保存或导出应用了滤镜的图像似乎非常困难..

我原本寄予厚望 @niklasvh's html2canvas 是可能的.遗憾的是,它无法捕获大多数 CSS3 属性,更不用说滤镜效果了。

如果有人有解决方案或可悲的是,明确知道这是不可能的,我们将不胜感激!谢谢!

最佳答案

据我所知,您无法将 CSS 应用于 HTML5 canvas 元素中的图形(因为它们不是 DOM 的一部分)。

不过,没关系!我们仍然可以相对轻松地制作基本的滤镜效果,只需几行 JavaScript 即可将它们保存为图像。

我找到了一篇关于应用 sepia-like effect to the canvas and saving it as an image 的好文章.我不会复制它,而是突出显示这篇文章的主要内容。

修改 Canvas 图像:

var canvas = document.getElementById('canvasElementId'),
    context = canvas.getContext('2d');

var imageData = context.getImageData(0, 0, canvas.width, canvas.height);

for (var i = 0; i < imageData.data.length; i+=4) {
    ...
}

为了访问某些 Canvas API,您需要使用上述 JavaScript 在 Canvas 上激活 2d 上下文。 MDN 有一些很棒的 AP​​I 文档,您可以通过 context object 获得这些文档。 ,但这里要注意的重要部分是 getImageData() 调用。基本上,它会抓取您定义区域中的所有像素值(在上面的例子中,我们抓取了整个图像)。然后,有了这些数据,我们可以遍历所有像素并根据需要更改它们。在sepia article ,它显然在进行一些有趣的调整,但您也可以根据需要进行灰度、模糊或任何其他更改,并且有一个很棒的 canvas filters library on Github仅此而已。

如何保存 Canvas 图像:

var canvas = document.getElementById('canvasElementId'),
    image = document.createElement("img");

image.src = canvas.toDataURL('image/jpeg');

document.body.appendChild(image);

上面的脚本将选择您的 Canvas (假设您已经完成绘图)并创建一个图像元素。它们使用 toDataURL() 生成一个 url,您可以使用该 url 在图像元素上设置源。在上面的示例中,图像元素附加到文档主体。您可以在 MDN's canvas page 上查看更多信息.

关于javascript - 捕获/保存/导出应用了 CSS 滤镜效果的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270897/

相关文章:

javascript - 如何获得前2个单词?

jquery - 将 Jquery 插件添加到 Backbone + require.js 代码

css - 是否可以将 div 样式设置为梯形?

css - 如何在将鼠标悬停在图像上时在标签中显示图像名称

javascript - 如何设置一个间隔并同时增加一个值?

javascript - 更改 svg 图像的颜色

javascript/jquery 使用 contenteditable 进行语法高亮显示

javascript - 基本名称无法连接 react 路由器

javascript - 如何解决 Javascript 正则表达式模式中的意外量词?

html - 使用顶部三 Angular 形和阴影进行划分