2013-02-07 43 views
3

我想使用node.js和node-canvas包产生动画文件,逐帧提取。部分动画包括缩放和移动图像。我的问题是,虽然根据节点画布和cario(画布后面的图形库),默认情况下应该执行消除锯齿,但似乎没有发生抗锯齿。此外,使用此系统可以控制according to node-canvas消除锯齿ctx.antialias = 'gray';,但它似乎也没有做任何事情。 如果有更多的细节我可以提供,可能有帮助,请让我知道。 有什么办法,直接使用node-canvas甚至cairo来为图像转换添加抗锯齿功能?节点画布图像反锯齿似乎并不工作

P.S.我正在使用ctx.drawImage方法绘制图像,并且我已经尝试使用patternQuality = 'best';,但没有成功。

+1

也许在节点画布上发布此问题 – kangax

+0

不是节点画布/开罗用户,但反锯齿似乎仅适用于渲染形状。尝试使用'CanvasRenderingContext2d#patternQuality'来代替。 – robertklep

+0

我也试过'patternQuality'没有成功。我会将其添加到原始问题。谢谢。 – iMoses

回答

6

放大模式,cairo默认使用双线性插值,这应该看起来合理。然而,当降尺度,开罗目前(截至1.12.14)不正确的抗锯齿模式。没有办法得到这个,但实际上并没有将这个功能添加到cairo本身,尽管可以在下面看到一个潜在的解决方法。

cairo中的'antialias'设置控制光栅化形状和文本的反锯齿,而不是模式。其控制抗锯齿的模式设置被称为“cairo_pattern_set_filter”,具有以下值:

CAIRO_FILTER_FAST,    // usually the same as NEAREST 
CAIRO_FILTER_GOOD,    // usually the same as BILINEAR 
CAIRO_FILTER_BEST,    // usually the same as BILINEAR 
CAIRO_FILTER_NEAREST,   // for upscaling, this is pixel-replication 
CAIRO_FILTER_BILINEAR,   // for upscaling, this is linear interpolation 
CAIRO_FILTER_GAUSSIAN   // not implemented, should not be used 

但是如前所述,他们没有为缩减工作。

一些人已经使用的解决方法是按2步缩小图像。也就是说,在两个维度中将图像缩小到一半大小,直到大致为所需的大小。这个缩小的图像然后可以用于缩小比例小于2的经过修改的转换。

+0

谢谢!我会尽快检查它在视觉效果和表现方面的有效性。 – iMoses