【问题标题】:PHP ImageMagick: how to antialias a linePHP ImageMagick:如何消除线条的锯齿
【发布时间】:2019-04-25 07:07:00
【问题描述】:

我遇到了边缘锯齿线的问题(见白线):

如果我减少笔画(从 10 到 4),那没关系,但是线条不够明显(我需要更粗的线条):

我已经设置了$canvas->setStrokeAntialias(true);,但它没有帮助。如果我增加图像分辨率,那么我需要做更大的笔画,最终结果是一样的。我怎样才能获得一个很好的抗锯齿线,它也很粗?

这是我的代码:

$canvas = new \ImagickDraw();
$canvas->setStrokeColor($stroke_color);
$canvas->setFillColor($fill_color);
$canvas->setStrokeWidth($stroke_width);
$canvas->setStrokeAntialias(true);

$canvas->line(....);
$canvas->line(....);
$canvas->line(....);
...

编辑:我也试过this answer + 减少线条的笔划,但结果是一样的。

【问题讨论】:

  • 看起来你用ImageDraw::line绘制每个片段,试试用ImageDraw::polyline
  • 不要添加 setStrokeColor 和 setStrokeWidth。那只会让它更宽。只需使用 setFillColor。默认情况下,描边轮廓是抗锯齿的,因此请移除 setStrokeAntialias。
  • @emcconville,好点子!如果这消除了锯齿状边缘,将尝试。
  • @fmw42 那样的话,如何控制线条的粗细?
  • 如果你真的想要粗线条,那么你将需要 setStrokeColor 和 setStrokeWidth。但是请尝试删除 setStrokeAntialias,因为它默认处于启用状态。多段线会更好,因为更少的工作。如果去除线条下方和周围的阴影会发生什么?

标签: php imagemagick imagick


【解决方案1】:

根据 emcconville 的评论,我能够通过使用 polyline() 来绘制线条而不是多次调用 line() 来解决此问题。

【讨论】:

    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多