2013-01-11 52 views
15

我身边的工具,使使用CSS3滤镜效果(饱和度,棕褐色,对比度等)捕获/保存/用CSS滤镜效果输出图像的应用

制作的图片编辑器是一个简单的图片编辑器容易的部分,但是是否有可能保存或出口过滤器应用图像似乎非常困难..

我原本寄予厚望@niklasvh's html2canvas。不幸的是,它并没有捕获大多数CSS3属性,更不用说过滤效果了。

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

+0

这解决了吗?因为我有完全相同的问题。 – user3508453

+0

也有同样的问题 – Ronnie

回答

6

你不是,我意识到,能够将CSS应用于HTML5 canvas元素中的图形(因为它们不是DOM的一部分)。

但是,没关系!我们仍然可以使用相对简单的基本过滤器效果,并通过几行JavaScript将它们保存为图像。

我发现了一篇很好的文章,应用sepia-like effect to the canvas and saving it as an image。我将重点介绍文章中较大的内容,而不是复制它。

修改画布图像:

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的很好的文档,可以通过context object获得,但是这里需要注意的重要部分是getImageData()调用。基本上,它会抓取您定义区域中的所有像素值(在上述情况下,我们抓取整个图像)。然后,通过掌握这些数据,我们可以遍历所有像素并根据需要进行更改。在sepia article中,显然会做出一些有趣的调整,但您也可以根据需要进行灰度,模糊或任何其他更改,并且有一个很棒的选项。

如何保存画布图像:

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

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

document.body.appendChild(image); 

以上脚本将选择你的画布(假设你已经做了你的图纸),并创建一个图像元素。它们使用toDataURL()生成一个url,您可以使用它来设置图像元素上的源。在上例中,图像元素被附加到文档主体。您可以在MDN's canvas page上查看更多信息。

3

我得到了你的答案。 我做了这个程序,最后它的工作。

那些步骤是:
1.上传图像(JPG/PNG)
2.转换到帆布
3.定制的CSS过滤器。
4.渲染使用camanJS保存为图像。
5.完成。

您还可以通过将滤镜的值修改为默认值来重置效果值。

好运!