Node-Canvas图像抗锯齿似乎不起作用

时间:2013-02-07 10:13:09

标签: javascript node.js canvas antialiasing cairo

我正在尝试使用node.js和node-canvas包生成动画文件,逐帧提取。动画的一部分包括缩放和移动图像。我的问题是,似乎没有发生反锯齿,尽管根据node-canvas和cario(画布后面的图形库),默认情况下应该进行抗锯齿处理。此外,可以使用此系统ctx.antialias = 'gray';来控制according to node-canvas抗锯齿,但它似乎也没有做任何事情。 如果有任何更多细节我可以提供,可能会有所帮助,请告诉我。 有没有办法,直接使用node-canvas甚至cairo为图像转换添加抗锯齿?

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

1 个答案:

答案 0 :(得分:6)

升级模式时,cairo默认使用双线性插值,这看起来应该合理。但是,当缩减时,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。