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)'
 

今や、生成されるはずのなかった半透明の灰色のピクセルが大量、大量、大量に見られます。これらのピクセルは、リサイズされた画像の周りの「黒いハロー」を表します。


回避策

上記の問題は、リサイズ フィルターが最終的なピクセルの色に完全透過色は使用せず、透過性のみを使用する必要があることを理解していないことが原因です。

この問題は、透過性を持つぼかしに関係する問題と同じであり、Transparent Bug ぼかすで説明されており、この問題に対する同様の解决方案もここで機能します。

両方の問題に対して機能する回避策の 1 つは、透過色の色をリサイズされる画像のエッジの色と同じに設定することです。つまり、完全に透過的な黒(例:none)ではなく、完全に透過的な白(例:#FFFF)を背景として使用します。

    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 を使用して)、正規化すると、halo 効果は表示されません。


作成日 : 2005 年 5 月 3 日
更新日 : 2005 年 8 月 10 日
作成者 : Anthony Thyssen, <Anthony.Thyssen@gmail.com>
例は次のもので生成されています : [version image]
URL : https://imagemagick.dokyumento.jp/Usage/bugs/resize_halo/