1

を使用して 2 つの画像を結合しようとすると-mosaic、次の 2 つの選択肢があるようです。

$ convert logo: rose: -mosaic result.png
$ convert -mosaic logo: rose: result.png

どちらも同じ画像になります。括弧を使用すると、これはもう当てはまりません。

$ convert logo: \( rose: \) -mosaic result.png

それでも同じ出力画像が得られますが、次の画像

$ convert -mosaic logo: \( rose: \) result.png

はかなり異なる結果をもたらします。

最後の結果が異なる理由を誰か説明できますか? これは ImageMagick のバグconvertか、まだ把握できていない別の概念ですか?

ImageMagick 6.8.6-2 を使用しています (Arch Linux のパッケージとして)

4

2 に答える 2

1

なぜこのように機能するのかがわかったと思います。しかし、膨大な量のドキュメントが利用可能であるにもかかわらず、ImageMagick は依然として難解な科学のように見えます。これは、さまざまな互換性レイヤーが織り込まれているためです。

http://www.imagemagick.org/Usage/basics/#cmdlineを読んだ後、次のことを要約できると思います。

  1. ImageMagick 6.x にはまったく新しい構文があり、最初の画像の前に演算子を置いても意味がありません。
  2. ImageMagick 6.x は、古い 5.x バージョンの構文をある程度エミュレートしようとします (「5.x のような単純な操作convert [operator] [input-image] [output-image]はまだ可能であるはずです」)。
  3. 私の理解が正しければ、括弧は 5.x の一部ではありませんでした。
  4. そのため、コマンド ラインに括弧が存在すると互換モードが何らかの形で無効になり、観察された動作が説明されると結論付けても、それほど大げさではありません。

これを読んでいる人が convert to mine の構文で同様の問題を抱えている場合は、上記のリンクを読んで、画像リスト、画像演算子、および画像シーケンス演算子の概念を完全に理解するまで勉強をやめないことをお勧めします。それほど複雑ではありませんが、試行錯誤を行うだけでは、私のように構文を理解するのに非常に苦労するでしょう。

于 2013-07-14T08:12:45.410 に答える
0

括弧は、追加の画像処理を親プロセスから分離できるように するサブプロセス、または画像スタックを作成します。

$ convert logo: rose: -mosaic result.png

ここに画像の説明を入力

$ convert logo: \( rose: -negate -resize 200% \) -mosaic result.png

ここに画像の説明を入力

モザイクはレイヤーの結合を想定しているため、コマンドのシーケンスが重要になる場合があります。-mosaic コマンドは無視され、どのサブプロセスでもコマンドは実行されないため、次のコマンドは同一です。

$ convert logo: rose: result.png
$ convert logo: \( rose: \) result.png
$ convert -mosaic logo: \( rose: \) result.png
于 2013-07-13T16:12:33.007 に答える