捕捉/保存/导出应用了CSS滤镜效果的图像
Capture/save/export an image with CSS filter effects applied
我正在制作一个简单的图片编辑器,使用CSS3滤镜效果(饱和度,深褐色,对比度等)
制作图片编辑器是容易的部分,但是是否可以保存或导出应用滤镜的图像似乎非常困难。
我原本对@niklasvh的html2canvas抱有很高的希望。不幸的是,它不能捕获大多数CSS3属性,更不用说过滤器效果了。
如果有人有一个解决方案,或者可悲的是,明确的知识,这只是不可能的,这将是非常感激!谢谢!
你不能,我知道,能够应用CSS到HTML5画布元素中的图形(因为它们不是DOM的一部分)。
不过,没关系!我们仍然可以做基本的滤镜效果相对容易,并保存为一个图像,只需几行JavaScript。
我发现了一篇很好的文章,介绍了在画布上应用类似深褐色的效果并将其保存为图像。我将突出显示文章中较大的要点,而不是复制它。
修改画布图像:
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) {
...
}
为了访问一些画布API,你需要使用上面的JavaScript在画布上激活2d上下文。MDN有一些很好的关于API的文档,您可以使用上下文对象,但是这里需要注意的重要部分是getImageData()
调用。基本上,它会抓取你所定义区域的所有像素值(在上面的例子中,我们抓取整个图像)。然后,有了这些数据,我们可以遍历所有像素并根据需要更改它们。在sepia的文章中,它显然做了一些有趣的调整,但你也可以做灰度,模糊,或任何其他必要的改变,Github上有一个很棒的画布过滤器库。
如何保存画布图像:
var canvas = document.getElementById('canvasElementId'),
image = document.createElement("img");
image.src = canvas.toDataURL('image/jpeg');
document.body.appendChild(image);
上面的脚本将选择您的画布(假设您已经完成了绘图)并创建一个图像元素。如果它们使用toDataURL()
生成一个url,您可以使用该url在图像元素上设置源。在上面的例子中,image元素被附加到文档主体。您可以在MDN的画布页面查看更多信息。
我知道你的答案了。我编写了这个程序,终于可以工作了。
这些步骤是:
1. 上传图片(JPG/PNG)
2. 转换为画布
3.自定义CSS过滤器。
4. 渲染使用camanJS保存为图像。
5. 做。
你也可以通过修改过滤器的值来重置效果值。
祝你好运!
- 可以在这里为背景图像设置滤镜吗
- 使用 GSAP 对模糊滤镜进行动画处理
- 在没有滤镜的情况下模糊背景
- Kineticjs 将 Mask 滤镜应用于图层
- 将特殊效果应用于所选滤镜
- 角度滤镜不打印空格
- HTML5 画布对比度滤镜
- 如何在IE中将灰度和反转效果与SVG滤镜相结合
- 角度滤镜和 NgAnimate 冲突
- 根据滤镜的值有条件地添加 ng-animate 指令
- D3:将滤镜作为背景添加到SVG元素
- 如何为图像添加滤镜(模糊)
- 推特打字,寻血猎犬滤镜开始
- 从一个画布复制带有滤镜的图像并粘贴到另一个画布
- Array.滤镜打破狩猎印花
- Kinetijs:应用滤镜后阴影模糊不起作用
- 同位素滤镜图像奇怪的动画和摇晃几秒钟当我点击滤镜菜单
- 使用CSS滤镜后保存图像
- 如何在KonvaJS中对带有图像填充的形状应用滤镜
- 捕捉/保存/导出应用了CSS滤镜效果的图像