【问题标题】:Node-Canvas image anti-aliasing doesn't seem to workNode-Canvas 图像抗锯齿似乎不起作用
【发布时间】:2013-02-07 10:13:09
【问题描述】:

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

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

【问题讨论】:

  • 也许在 node-canvas 的问题上发布这个
  • 不是 node-canvas/Cairo 用户,但抗锯齿似乎仅适用于渲染形状。尝试改用CanvasRenderingContext2d#patternQuality
  • 我也试过patternQuality但没有成功。我会将其添加到原始问题中。谢谢。

标签: javascript node.js canvas antialiasing cairo


【解决方案1】:

upscaling 模式时,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 的修改变换一起使用。

【讨论】:

  • 谢谢!我会尽快测试它在视觉效果和性能方面的有效性。
  • 你是如何修复节点画布中的模糊文本问题的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多