Jus*_*ull 5 html javascript canvas blur filter
必须有办法做到这一点.我用html5画布绘制了一个形状,我想模糊它.据我所知,没有本机方法所以我假设需要一个js库.问题是大多数库只模糊像这样的图像.这可能吗?
jun*_*var 11
myContext.filter = 'blur(10px)';
Run Code Online (Sandbox Code Playgroud)
画布 2D API 的 CanvasRenderingContext2D.filter 属性提供模糊或灰度等过滤效果。它类似于 CSS filter 属性并接受相同的功能。https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/filter
它仍然是实验性的,但受到 chrome 和 firefox atm 的支持。
Jar*_*rod 10
你可以用CSS来模糊画布.如果它只是你想要模糊的形状,那么形状将需要在它自己独立的图层(画布)上,你可以动态创建.
例:
canvas.style.webkitFilter = "blur(3px)";
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令再次取消模糊画布:
canvas.style.webkitFilter = "blur(0px)";
Run Code Online (Sandbox Code Playgroud)
这可能是模糊画布的最快(也是最简单)方式 - 特别是对于移动设备.
对于几乎是高斯的快速模糊,我建议使用StackBlur:http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html
或者你可以使用这个Superfast Box Blur进行2次迭代:http: //www.quasimondo.com/BoxBlurForCanvas/FastBlurDemo.html
小智 2
您链接到的 pixastic 库示例实际上应该使用 canvas 元素作为第一个参数而不是图像。
默认情况下,pixastic 库将尝试用它创建的画布元素替换您传入的节点。为了防止它这样做,您可以包含一个选项来指定离开 DOM 节点并包含一个回调来自行处理返回的数据。像这样的东西:
Pixastic.process(canvas, "blur", { leaveDOM: true }, function(img) {
canvas.getContext('2d').drawImage(img, 0, 0);
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想依赖库,您可以使用 getImageData() 自行实现模糊,操作返回的像素数据并使用 putImageData() 将模糊图像绘制回画布。
另一件需要注意的事情是,单个像素操作速度很慢,并且可能不适用于大图像。如果这是一个问题,您可以尝试缩小图像然后再放大,以获得快速完成的模糊效果。像这样的东西:
ctx.drawImage(canvas, 0, 0, canvas.width / 2, canvas.height / 2);
ctx.drawImage(canvas, 0, 0, canvas.width / 2, canvas.height / 2, 0, 0, canvas.width, canvas.height);Run Code Online (Sandbox Code Playgroud)