ImageMagick 示例 --
调整大小光晕错误 -- 已修复

索引
ImageMagick 示例前言和索引
已知和已修复错误索引
这是对调整大小过滤器在对透明背景上非常浅色图像进行小幅调整时生成的“调整大小光晕错误”的演示。此错误在 ImageMagick 版本 6.2.4 发布时,应用户要求已完全修复。

此页面供仍然可能遇到此错误的较早 IM 用户参考。此页面上的示例在错误修复时/如果错误修复后尚未重新创建。


调整大小光晕错误

我们在透明背景上有一个白色文本。一切正常。

    magick -background none -fill white -pointsize 72 -font Candice \
            label:Hello   label.png
 
[IM Output]

但稍微调整它的大小就会产生稍微暗淡的边缘,尽管在这个页面的较暗背景上不容易看到。

    magick -background none -fill white -pointsize 72 -font Candice \
            label:Hello  -resize 95%  resized.png
 
[IM Output]

为了清楚地看到光晕,让我们将白色文本图像叠加在白色背景上,然后归一化以显示较暗的像素。

    magick -background none -fill white -pointsize 72 -font Candice \
            label:Hello  -resize 95% \
            -background white -flatten -normalize     resize_halo.jpg
 
[IM Output]

我们可以看到,这确实是调整大小错误,因为我们去除了调整大小命令并叠加,生成了预期的纯白色图像。之前的命令应该生成纯白色图像。

    magick -background none -fill white -pointsize 72 -font Candice \
            label:Hello  \
            -background white -flatten -normalize      no_resize.jpg
 
[IM Output]


非图形化错误测试

让我们从不同的角度看看这件事....

运行命令...

    magick -background none -fill white -pointsize 72 -font Candice \
             label:Hello    txt:-  |\
      egrep -v '\) (white|none|#FFFFFFFFFFFF)'
 

egrep”将过滤掉“txt:”输出中所有完全透明的黑色或白色、半透明的白色或完全不透明的白色像素。这基本上保留了“txt:”注释头和任何半透明的灰色或黑色像素,这些像素形成了光晕。

在上述情况下,没有半透明的灰色或黑色像素,因此只生成了单行命令头。

但是,如果我们在输出“txt:”图像文件之前稍微调整图像的大小...

    magick -background none -fill white -pointsize 72 -font Candice \
            label:Hello   -resize 95%    txt:-  |\
      egrep -v '\) (white|none|#FFFFFFFFFFFF)'
 

您现在将看到大量、大量、大量的半透明灰色像素,这些像素本不应该生成!!这些像素代表了调整大小图像周围的“黑色光晕”。


解决方法

上述问题是由调整大小过滤器不理解在像素的最终颜色中不应使用完全透明的颜色,而只应使用透明度造成的。

这个问题与涉及透明度的模糊相同,并在模糊透明度错误中讨论过,解决此问题的类似方法也适用于此。

对这两个问题都有效的一种解决方法是,将透明度的颜色设置为与要调整大小的图像的边缘颜色相同。也就是说,使用完全透明的白色(例如:'#FFFF'作为背景,而不是完全透明的黑色(例如:'none')。

    magick -background '#FFFF' -fill white -pointsize 72 -font Candice \
            label:Hello   -resize 95%  resized_white.png
 
[IM Output]

对于调整大小,您也可以尝试通过使用“point”调整大小过滤器来关闭调整大小过滤器。


    magick -background none -fill white -pointsize 72 -font Candice \
            label:Hello   -filter point  -resize 95%  resized_point.png
 
[IM Output]

这对少量调整大小效果相当好,但在大幅调整大小图像时就会失效。

    magick -background none -fill white -pointsize 1200 -font Candice \
            label:Hello   -filter point -resize 5%  resized_point_big.png
 
[IM Output]

如果您仔细观察结果,您会发现图像虽然没有调整大小光晕效果,但实际上也没有边缘抗锯齿(也就是说,它有“锯齿”。)。此外,在更详细的图像上,调整大小图像的内部细节可能非常糟糕。即使是微小的调整大小也会在图像上产生摩尔纹。

将这些示例中的任何一个叠加在白色背景上(例如,使用 -flatten)并进行 -归一化将不会显示“光晕”效果。


创建时间:2005 年 5 月 3 日
更新时间:2005 年 8 月 10 日
作者:Anthony Thyssen,<Anthony.Thyssen@gmail.com>
使用以下版本生成示例:[版本图像]
URL:https://imagemagick.org.cn/Usage/bugs/resize_halo/