ImageMagick の例 --
その他

目次
ImageMagick の例の序文と目次
補間 (ピクセル間のカラー検索)
仮想ピクセル (画像外のカラー検索)
単色のランダムスポット
アノテート引数の使用方法
スプライス:新しい画像演算子の作成
境界線、フレーム、および境界線色の使用
リスト演算子のテスト
このページは、ImageMagick のさまざまな側面をテストする例で構成されています。ただし、他のサンプルページの議論には(少なくとも正式には)適切に適合しません。また、このページには、特定の IM 演算子を使用したバージョンの引数の結果を示す表も含まれています。ただし、他の人もこれを行っているので、追加するものがない限り、これ以上は扱いません。

ピクセル補間またはピクセル間のカラー検索

"-interpolate" 設定は、ソース画像の色を検索するときに使用されますが、その「ルックアップポイント」はソース画像のピクセルの間にあります。これは、"-fx" (DIY 特殊効果演算子) や "-distort" (汎用画像歪み演算子) などのさまざまな画像操作、および 円形歪み などの他の関連演算子で行われます。基本的に、「補間」は、ポイントが画像内の実際のピクセルと正確に一致せず、ピクセルの間のスペースにある場合に、画像からの 直接カラー検索 をどのように解釈するかを IM に指示します。たとえば、ピクセル位置 3,4 の色を検索すると、正確なピクセル色が取得されます。しかし、ポイント 3.23,4.75 で画像の色を検索した場合、IM は何を返す必要がありますか? 3,4 または 3,5 のピクセル色を取得する必要がありますか?あるいは、周囲のピクセルの色の混合を取得する必要がありますか?その場合、どのように色をマージする必要がありますか?ピクセル補間 は、浮動小数点の位置(ピクセル座標)で単一の色を検索するときに、ImageMagick が何をするかを定義します。補間は、リサンプリングフィルター によって提供されるようなピクセルリサンプリングと似ています。本質的な違いは、リサンプリングには「スケール」、「面積」、または可変「ウィンドウ」があり、その領域内のすべてのピクセルを表す色が返されることです。補間には「スケール」は関係なく、ルックアップの単一の「ポイント」と、そのポイントの周囲の固定サイズの「領域」のみがあり、そのポイントで使用する色を決定します。もちろん、ほとんどの領域リサンプリングアルゴリズムは、リサンプリングの領域が最小限の動作「ウィンドウ」に達すると補間方法に発展する傾向があり、これは画像が拡大またはアップサンプリングされるときに自然に発生します。これが、補間フィルターガウスぼかしフィルター が画像の拡大に適している傾向がある理由です。補間は基本的にサンプリングの下位形式であり、「何色」という質問に対するシンプルで迅速な回答が必要な場合に基本的に使用されます。

単純な補間方法

これらは、ポイント補間から使用する色を返すために可能な限り少ないことを行う、単純明快な方法です。最も単純なのは「Nearest」と「Integer」で、ミキシングやその他のブレンド効果なしで、ソース画像から単一のピクセル色を選択します。これにより、画像の元の色の値が保持されますが、エイリアシング効果のコストがかかり、通常は画像の滑らかさが低下します。
IM v6.7.6-2 以降、「Nearest-Neighbour」補間設定の省略形として「Nearest」を使用できます。
2 つは非常に似ていますが、ルックアップ座標がソース画像から抽出するピクセルのみが異なります。具体的には、「Integer」はルックアップポイントを単純に切り捨ててピクセルを選択するため、一般的にピクセルが右下方向に 0.5 ピクセル移動します。これは通常、ソース画像の単純化された「スケーリング」のみに使用されます。一方、「Nearest」は浮動小数点ルックアップ座標に最も近いピクセルを選択するため、より正確な結果が得られます。「Blend」は、サンプリングポイントからの距離に応じて、最も近い 1、2、または 4 つのピクセルをブレンド(平均化)します。その結果、元のピクセル色は引き続き存在しますが、サイズは半分になり、ブレンドされた色のチェッカーボードがスペースを埋めます。(以下の例を参照)「Average」は、実際には正確なカラーマッチを生成することはありませんが、常に周囲の 4 つのピクセルを混合して局所平均を生成します。これは、カラー検索の状況で役立ちます。「Average4」はこの補間方法のエイリアスとしても使用できます。「Average9」は似ていますが、サンプリングポイントの周囲の最も近い 9 つのピクセルの平均をとるため、ぼやけた結果になります。「Average16」はサンプリングポイントの周囲の最も近い 16 ピクセルの平均をとるため、非常にぼやけた結果になります。小さな色のピクセルグループまたは単一の白いピクセルを拡大する場合の、さまざまな単純な補間方法の概要を以下に示します。元の画像は「Nearest」の結果と似ていますが、はるかに小さくなっています。

  for method in  integer nearest blend average average9 average16 ; do
    magick \( xc:red xc:blue +append \) \
            \( xc:yellow xc:cyan +append \) -append \
            -bordercolor black -border 1 \
            -filter point -interpolate $method \
            +distort SRT 20,0 ip_color_${method}.jpg
    magick xc: -bordercolor black -border 2 \
            -filter point -interpolate $method \
            +distort SRT 16,0 ip_pixel_${method}.jpg
  done
[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
整数 ニアレストネイバー ブレンド 平均 平均9 平均16
IM v6.7.7-6 より前、「Average」は実際には「Average16」に相当していました。他の 2 つの平均化補間子と「Blend」、および「Background」はこの時点で追加されました。
もう 1 つの単純な補間方法として、「Background」が提供されています。これは、ソース画像の「サンプリング」に対して現在の背景色を返すだけです。多くの場合、これはかなり役に立ちません。通常、空白の単色の画像になってしまうからです。一般歪み演算子)から使用される EWA リサンプリングフィルターが、リサンプリングが「サポート」またはリサンプリング領域でピクセルを見つけられない場合に、補間ルックアップにフォールバックする リサンプリングの失敗 のチェックとして主に使用されます。補間を「Background」に設定し、背景色を目立つもの(「red」など)に設定することにより、結果の画像のピクセルを探して、リサンプリングが何らかの理由で「失敗」した場所、または「すべてのソース画像ピクセルを見逃した」場所を確認できます。通常、サポート設定が小さすぎるか、エキスパートフィルターオプションを使用していることが原因です。将来:補間領域全体で「ランダム」に選択する将来の補間オプションの可能性。派手な補間効果に役立つ可能性があります!

バイリニア

Bilinear」(または線形補間)は、デフォルトの補間方法であり、ルックアップまたはサンプリングポイントの周囲のピクセルの色を組み合わせて、実際の補間結果を得る最も簡単な方法の 1 つです。バイリニア補間の仕組みを説明する図を以下に示します。
[diagram]
つまり、直交方向に直線を接続して、指定されたサンプリングポイントの色を見つけます。結果は、サイズ変更に使用される 三角形リサンプリングフィルター とも同等です。

  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap  -fx 'v.p{i/(w-1),j/(h-1)}' \
          interpolate_bilinear.jpg
[IM Output]

  magick \( xc:white xc:black +append \) \
          \( xc:black xc:white +append \) -append \
          -size 100x100 xc: +swap -fx 'v.p{i/(w-1),j/(h-1)}' \
          interpolate_saddle.jpg
[IM Output]
この最後の画像は、4 つの既知の点の間のエッジに沿って線形グラデーションがどのように形成され、次にそれらのエッジの間に 2 番目の線形グラデーションが形成されるかを示しています。つまり、周囲のピクセルの間の色は、水平および垂直の線形グラデーションを使用して生成されます。これは、通常「サドル」と呼ばれる湾曲した 2 次元グラデーションを生成します。これは、2 つの反対側の角が上がり、他の 2 つの角が下がっているためです。この方法を使用して、45 度の角度の線形グラデーションをより直接的に生成することもできますが、対角線上に反対側の角に中間色を指定する必要があります。

  magick \( xc:blue xc:navy +append \) \
          \( xc:navy xc:black +append \) -append \
          -size 100x100 xc: +swap -fx 'v.p{i/(w-1),j/(h-1)}' \
          interpolate_45linear.jpg
[IM Output]
このデフォルトの補間方法の最も重要な側面は、画像のまさに中心のピクセルが常に 4 つの角の色の平均であり、エッジに完全な線形グラデーションがあり、角に正確なカラーマッチがあることです。

メッシュ

"-interpolate" 設定の「Mesh」は、「Bilinear」補間のバリエーションです。「Bilinear」は 3 次元の曲面を生成しますが、「Mesh」はピクセル間領域を 2 つの平らな三角形に分割するように設計されています。領域を 2 つの三角形に分割することは、2 つの「最も近い」コーナーカラーを持つ対角線に基づいています。
Mesh」アルゴリズムの詳細については、論文 ピクセルレベルのデータ依存三角測量による画像補間 を参照してください。
たとえば、上記で使用したのと同じコーナーカラーセットを使用してみましょう。

  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap   -interpolate Mesh \
          -fx 'v.p{i/(w-1),j/(h-1)}'    interpolate_tri-mesh.jpg
[IM Output]
ご覧のとおり、「Mesh」アルゴリズムは、「Bilinear」とほぼ同じカラー補間セットを生成しました。ただし、黄色とシアンの色を反転すると..

  magick \( xc:red xc:blue +append \) \
          \( xc:cyan xc:yellow +append \) -append \
          -size 100x100 xc: +swap   -interpolate Mesh \
          -fx 'v.p{i/(w-1),j/(h-1)}'    interpolate_tri-mesh2.jpg
[IM Output]
今回は、「Mesh」アルゴリズムは「blue」と「cyan」の色が 2 つの最も近いコーナーであると判断し、これらの 2 つのコーナーの間に斜めに線形グラデーションを作成しました。残りの色は、この線から他の 2 つのコーナーへの単純な平らな三角形のグラデーションを形成します。これは珍しい補間のように見えるかもしれませんが、この方法により、カラー画像のサイズ変更、回転、またはせん断がわずかに変更された場合でも、シャープな境界線がかなりシャープなままになります。実際、適応サイズ変更 操作("-adaptive-resize")は、小さな画像のサイズ変更にこの事実を使用して、結果の過度のぼかしを軽減します。たとえば、単一の「白」のコーナーがある場合、「mesh」はエッジが見つかったと想定し、補間された色を調整してこのエッジを強調表示します。

  magick \( xc:black xc:black +append \) \
          \( xc:white xc:black +append \) -append \
          -size 100x100 xc: +swap    -interpolate Mesh \
          -fx 'v.p{i/(w-1),j/(h-1)}'    interpolate_tri-mesh3.jpg
[IM Output]
もちろん、色がreasonably consistent gradientを生成する場合、 'mesh'補間もreasonably consistent gradientを生成します。

  magick \( xc:blue xc:navy +append \) \
          \( xc:black xc:black +append \) -append \
          -size 100x100 xc: +swap    -interpolate Mesh \
          -fx 'v.p{i/(w-1),j/(h-1)}'    interpolate_tri-mesh4.jpg
[IM Output]
ご覧のとおり、結果は非常にreasonable gradientですが、よく見ると、2つの別々の三角形の斜めの接合部を見ることができます。変更はバイリニアほどスムーズではありません(これも正確にはスムーズではありません)が、これらはサイズ変更または歪んだ画像のシャープなエッジを保持しようとはしません。

Catrom (Catmull-Rom)

-interpolate」設定の「Catrom」(一般的には不正確に「BiCubic」補間として知られています)は、ポイントルックアップの色の決定において、より複雑です。基本的に、ピクセル間領域の角の色を見るだけでなく、それらの最近傍ピクセルを超えた色も参照します。サンプリングポイントを中心とした4x4領域の合計16ピクセルです。基本的に、関係する領域全体に曲線を当てはめ、使用するのに最適な全体的な色を決定します。このプロセスをよりよく説明する図を以下に示します...
[diagram]
そして、標準の4色の補間された色がこちらです。

  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap   -interpolate Catrom \
          -fx 'v.p{i/(w-1),j/(h-1)}'    interpolate_catrom.jpg
[IM Output]
上記の画像は「Bilinear」補間と非常によく似ているように見えるかもしれませんが、結果は補間された色を生成するために直線ではなく、より滑らかなブレンド曲線を持っています。ただし、この画像では、4つの近傍ピクセルを取り囲む他のピクセルの影響は示されていません。そのためには、もう少し広い領域を見る必要があります。この具体的な(非常に小さい)例では、周囲のピクセルは仮想ピクセル設定によって制御されます。

  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel edge \
          -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}'   interpolate_catrom_edge.jpg
  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel White \
          -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}'   interpolate_catrom_white.jpg
  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel Black \
          -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}'   interpolate_catrom_black.jpg
[IM Output] [IM Output] [IM Output]
実際の画像では、仮想ピクセルの影響は、通常、画像の端付近のみに影響します。この画像は幅が2ピクセルしかないため、上記の例は強く影響を受けます。これは、より大きく典型的な画像では当てはまりません。
ご覧のとおり、曲線は周囲の色に強く影響され、周囲の色で定義されているように、非常にタイトなシャープな色の変化、またはよりブレンドされた色の変化が生じます。ただし、周囲のピクセルの色の強い変化は、その色の反転または負の小さな領域を生成する可能性があることもわかります。これはリンギングアーティファクトであり、通常、実際の画像の補色の非常に鋭いエッジにのみ見られます。
非常に強い色のエッジに対するこのリンギング効果はクリップされる可能性があり、ひどいピクセルのラインが生じます。「RGB」ではなく、「Lab」や「Luv」などの異なる色空間でサイズ変更と補間を行うことで、この問題を防ぐことができます。

この問題の詳細と例については、LAB色空間でのサイズ変更を参照してください。

BiCubic」(補間された三次フィルター)は、非常に大きなフィルターファミリーを指し、そのため、その意味は非常に不正確です。ただし、引き続き使用できますが、より正確な名前が優先されるため、その使用は推奨されていません。

IM v6.7.7-7以降、「BiCubic」は単に「Catrom」のエイリアスであり、通常は優れた「三次補間器」(b = 0、c = 1/2)と見なされます。補間に何を使用しているかを明確にするために、「BiCubic」ではなく「Catrom」という名前を使用する必要があります。

IM v6.7.7-7より前、「BiCubic」は実際には、過度に強い負のリンギング効果を持つ極端な「Cardinal Cubic」フィルター(b = 0、c = 1)を使用していました。これは「Catrom」に完全に置き換えられ、補間関数としては使用できなくなりました。

IM v6.3.5-3より前、「BiCubic」は非常にぼやけた「Spline」三次補間器として実装されていました。そのフィルターは、このバージョンのImageMagickで名前が変更されました。(次を参照)

スプライン

Spline」補間法は、上記の「Catrom」と同様に、最も近い16ピクセルも使用します。ただし、これは非常にぼやけた、ガウスのような補間です。

  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap   -interpolate spline \
          -fx 'v.p{i/(w-1),j/(h-1)}'    interpolate_spline.jpg
[IM Output]
ご覧のとおり、上記の「Spline」補間のまさに角にある色はミュートされています。これは、補間されたサーフェスが実際にはそれらのピクセルの元の色の位置を通過しないためです。本質的に、それは過度に「ぼやけて」おり、より正確には「Bスプライン」サーフェスとして知られています。サーフェスはまだ一種の三次フィルター(b = 1、c = 0)ですが、区分的立方曲線の技術を使用して生成されます。ただし、この曲線は元のピクセルの色、特に色の変化が強い領域にのみ近づきます。つまり、正確な整数ピクセル位置の補間されたルックアップでは、その実際のピクセルの色が返されるのではなく、周囲のピクセルとの色のぼかしが返されます。これはしばしば悪いと考えられますが、一般的なスムージング関数として使用できます。「Catrom」と同様に、周囲のピクセルの影響も受けます。

  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap -interpolate Spline -virtual-pixel edge \
          -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}'   interpolate_spline_edge.jpg
  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap -interpolate Spline -virtual-pixel White \
          -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}'   interpolate_spline_white.jpg
  magick \( xc:red xc:blue +append \) \
          \( xc:yellow xc:cyan +append \) -append \
          -size 100x100 xc: +swap -interpolate Spline -virtual-pixel Black \
          -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}'   interpolate_spline_black.jpg
[IM Output] [IM Output] [IM Output]
実際の画像では、仮想ピクセルの影響は画像の端のみです。ルックアップが行われているピクセル間領域を取り囲む実際のピクセルがあります。
ここでは、ピクセルの色にうまく適合しない「スプライン」曲線から生じる色のミュートの影響を確認できます。結果は、一般的に、色のついた領域のエッジと細い線がぼやけています。ただし、これらは、「Catrom」補間で発生する可能性のある負の「リンギング」効果を示すことはありません。

補間の背景

補間の影響は、多くの場合、より広い領域に及ぶため、ここでは、白または黒の周囲のピクセルを持つ4つの主要な補間方法の拡大図を示します。

  for method in   bilinear mesh catrom spline  ; do
    for vpixel in   white black  ; do
      magick \( xc:red xc:blue +append \) \
              \( xc:yellow xc:cyan +append \) -append \
         -size 100x100 xc: +swap -interpolate $method -virtual-pixel $vpixel \
         -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' ip_area_${method}_$vpixel.jpg
    done
  done
[IM Output] [IM Output] [IM Output] [IM Output]
[IM Output] [IM Output] [IM Output] [IM Output]
バイリニア メッシュ Catrom スプライン
ご覧のとおり、周囲の背景色は「双線形」補間色には実際には影響しません。存在する背景色に重ね合わせられているように見えます。ただし、「メッシュ」がより強いシャープなエッジを生成する方法を確認できますが、画像のエッジに関係する場合、周囲の色に応じて対角線を反転することを決定できます。この「反転」を確認するには、白と黒の背景の間の赤と青の結合を見てください。「catrom」と「spline」の補間曲線は、周囲のピクセルの影響を受けます。特に、絶対色を含むテストケースでは。そして最後に、「spline」補間は、実際には画像のガウスのようなぼかしです(シグマ0.65を使用)。「リンギング」やエイリアシング効果を排除するのに十分なぼかしですが、通常、ほとんどの使用にはぼかしすぎます。ガウスフィルターを参照してください。

回転線の補間

ここでは、垂直線の画像を作成し、アフィン歪みを使用して線を17度回転させ、生成されたアンチエイリアスピクセルが見えるようにビューを拡大することにより、さまざまな補間方法を示します。

  magick -size 10x20 xc: -draw 'line 4,0 4,20' \
          -scale 50x100 ip_line_none.gif
  for method in integer nearest bilinear mesh catrom spline;  do
    magick -size 10x20 xc: -draw 'line 5,0 5,20' \
            -interpolate $method -filter point -distort SRT 17 \
            -scale 50x100 ip_line_${method}.gif
  done
[IM Output]
回転なし
==> [IM Output]
整数
[IM Output]
ニアレストネイバー
[IM Output]
バイリニア
[IM Output]
メッシュ
[IM Output]
Catrom
[IM Output]
スプライン
ご覧のとおり、直接カラー検索メソッド「Interger」と「NearestNeighbor」は、高度にエイリアスされた結果を生成しますが、画像にある元のカラーのみを使用します。2つの主な違いは、「Interger」は結果の画像を半ピクセル下に押し下げる傾向があることです。「Bilinear」、「Mesh」、および「Catrom」は、一般的に非常に良好で類似した結果を生成します(詳細は後述)。後者は非常に鋭い回転線を生成します。これらのいずれも、一般的に優れたソリューションと見なされます。「Spline」補間法は、エイリアシング効果を除去するために、細い線を明確にぼかします。ただし、「Spline」は結果をぼかしすぎる傾向があり、回転線ではなく、グラデーションをスムージングするのに適しています。
上記の例では、特別な設定「-filter point」を使用して、歪み演算子が最終的なピクセル色の決定に単一の「ポイント」補間のみを使用するようにします。それがなければ、補間ルックアップの代わりに領域リサンプリングが使用されますが、これも非常に良好な結果を生成します。
これらの例では、「-rotate」演算子を使用しなかったことに注意してください。この演算子は、画像を回転させるためにピクセルせん断法を使用するためです。その結果、ピクセル補間は使用されません。

この方法で-rotate」演算子を使用した場合の例と、結果として得られるピクセルレベルの効果については、細い線を回転させるを参照してください。

更新:IMv7.7.3-4以降、回転演算子は内部で歪み演算子を使用しているため、上記の内容は当てはまらない場合があります。

回転エッジの補間

領域のエッジが歪んでいる場合、1本のピクセルラインと比較して、結果にわずかな違いがあります。

  magick -size 10x20 xc: -draw 'rectangle 0,0 4,19' \
          -scale 50x100 ip_edge_none.gif
  for method in  integer nearest bilinear mesh catrom spline; do
    magick -size 10x20 xc: -draw 'rectangle 0,0 4,19' \
            -interpolate $method -filter point  -distort SRT -17 \
            -scale 50x100 ip_edge_${method}.gif
  done
[IM Output]
回転なし
==> [IM Output]
整数
[IM Output]
ニアレストネイバー
[IM Output]
バイリニア
[IM Output]
メッシュ
[IM Output]
Catrom
[IM Output]
スプライン
上記は一般的に自明です。「Bilinear」と「Mesh」は、一般的な回転で適度にシャープなエッジを生成しますが、「Catrom」は歪んだ画像でよりシャープなエッジを生成します。ただし、「Spline」はぼやけたエッジを生成します。上記のケースでは、「Bilinear」と「Mesh」の違いは非常にわずかです。2つの方法は、歪み操作中に極端な拡大が行われた場合にのみ、目に見える違いを生成します。それ以外の場合、ピクセル強度のわずかな、ほとんど目立たない変化しか見られません。

仮想ピクセル画像カラー検索ミス

多くの演算子は、画像自体の境界外のカラーを検索する必要があることがよくあります。これには、画像のぼかし一般的な画像の歪みモルフォロジー演算子と畳み込み演算子一般的な歪み演算子、さらには非常に古い内破演算子の演算子が含まれます。では、-22、-3のピクセルを要求した場合、どのような色が返されるべきでしょうか?このようなピクセルは実際には存在しませんが、返されるカラー値は、画像処理全体、特に画像の実際のエッジに近いピクセルの結果のカラーに大きな影響を与える可能性があります。「-virtual-pixel」設定は、画像の通常の境界外にあるピクセルにアクセスするときにIMが何を返すかを定義します。[IM Output]たとえば、ここではFX DIY演算子-fx」を使用して、小さな画像とその周囲のすべてのピクセルを「検索」して表示し、デフォルトの-virtual-pixel」設定で何が返されるかを確認します。

  magick -size 70x70 xc:  tree.gif \
                  -fx 'v.p[-19,-19]'  virtual_default.gif
[IM Output]
Edge」「-virtual-pixel」設定は、要求された「仮想」位置に最も近い実際のピクセルの色を返します。つまり、最も近い「エッジ」カラーです。今回は、はるかに遅いFX演算子の代わりに、より高速なビューポートを使用した画像の歪みを使用して、周囲の仮想ピクセルを表示します。歪みメソッド「SRT 0」は、実際には画像の結果を歪ませることはなく、画像演算子が実際に見ているピクセル、特にソース画像を取り囲む「仮想」ピクセルを確認するだけです。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Edge -filter point   -distort SRT 0 \
          +repage  virtual_edge.gif
[IM Output]
'Edge' 仮想ピクセル設定はデフォルト設定であるため、上記は前の例と同じになります。この設定は、画像処理を行う際に、一般的にエッジ効果の影響が最も少なくなります。そのため、デフォルト設定として選択されました。ぼかし、または処理にピクセルの「近傍」を使用するその他のモルフォロジー演算子および畳み込み演算子を使用する場合に特に重要です。コーナーピクセルの色が、実際の画像を囲む斜めに隣接する領域を完全に塗りつぶしてしまうことに注意することが重要です。これにより、単一のコーナーピクセルがさまざまな画像変換に大きな影響を与える可能性があります。この「コーナー」効果は、画像をぼかすときに特に顕著になります。 'Tile' VP設定は、画像処理のエッジ効果を画像の境界に沿ってラップさせるために非常に役立ちます。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Tile  -filter point  -distort SRT 0 \
          +repage virtual_tile.gif
[IM Output]
これにより、作業中の画像が「タイル可能」のままであること、または画像が変更されるにつれて「タイル可能」になることを保証できます。詳細な例については、タイル画像の変更を参照してください。 'Mirror' は 'tile' と非常によく似ており、デフォルトの 'edge' よりも効果的な場合があります。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Mirror -filter point   -distort SRT 0 \
          +repage virtual_mirror.gif
[IM Output]
これは、ぼかし処理されている画像のエッジとコーナーの効果を軽減するのに特に役立ちます。ただし、他の効果を生成することもあります。
IM v6.5.0-1 までは、元の画像に直接添付された画像のみがミラーリングされていました。元の画像からさらに離れた他の仮想コピーはミラーリングされませんでした(通常のタイルパターン)。これは修正され、隣接する仮想コピーだけでなく、仮想キャンバス空間全体が正しくミラータイルされるようになりました。

一般歪み演算子でミラータイルを使用して非常に広い領域をミラータイルする場合、たとえば遠方の地平線を表示する場合にのみ重要になります。
'Transparent' は、実際の画像境界外のピクセルに対して透明色を返します。

  magick tree.gif -alpha set  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Transparent  -filter point  -distort SRT 0 \
          +repage virtual_trans.gif
[IM Output]
上記のアルファ「設定」演算子は、透明色が正しく塗りつぶされるように、画像にマットまたはアルファチャネルがあることを確認するために必要です。この設定がないと、上記は透明ではなく「黒」の色を返す可能性があります。これは、色「none」または「完全に透明な黒」がデフォルトの透明色であるためです。たとえば、ここで誤って透明度をオフにしています...

  magick tree.gif  -alpha off  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Transparent -filter point  -distort SRT 0 \
          +repage virtual_trans2.gif
[IM Output]
'Transparent' 設定は、歪んだ画像を後で「レイヤー化」してより大きな画像を構築する画像の歪みに特に役立ちます。たとえば、3Dアフィンキューブ、および3Dパースペクティブボックスです。 'white'、'gray'、および 'black' 設定は、上記の前の 'Transparent' 設定に似ています。境界外のピクセルに対して、その特定の色を返します。

  magick tree.gif  -alpha off  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel White -filter point  -distort SRT 0 \
          +repage virtual_white.gif
[IM Output]

  magick tree.gif  -alpha off  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Gray -filter point  -distort SRT 0 \
          +repage virtual_gray.gif
[IM Output]

  magick tree.gif  -alpha off  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Black -filter point  -distort SRT 0 \
          +repage virtual_black.gif
[IM Output]
他の単純な色が必要な場合は、"-background" 設定でその色を定義し、'Background' "-virtual-pixel" 設定を使用する必要があります。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Background -background coral \
          -filter point -distort SRT 0     +repage virtual_bgnd.gif
[IM Output]

'HorizontalTile' VP設定は、IM v6.4.2-6 に、360度の完全な "円弧" および "極座標" 歪みに役立つ特別な形式のタイリングとして追加されました。画像は水平方向にのみタイル化され、タイルの上下にある仮想ピクセルは現在の "-background" 色から設定されます。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel HorizontalTile  -background coral \
          -filter point -distort SRT 0     +repage virtual_horizontal.gif
[IM Output]
これにより、変換される画像が水平方向に「タイル可能」のままであることを保証できます。詳細な例については、タイル画像の変更を参照してください。 'HorizontalTileEdge' (IM v6.5.0-1 で追加)も仮想空間全体に画像を水平方向にタイル化しますが、仮想キャンバス空間の他の部分にサイドエッジピクセルを複製します。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel HorizontalTileEdge  -background coral \
          -filter point -distort SRT 0     +repage virtual_horizontal_edge.gif
[IM Output]
これらの2つのVPメソッドは、円形の画像が「ラップアラウンド」して端と端が結合する、完全な円形の '円弧' および '極座標' 歪みをより適切に処理するために追加されました。
同様に、'VerticalTile' VP設定(完全性のためにIM v6.4.2-6 にも追加)は、画像を垂直方向にのみタイル化し、現在の "-background" 色を使用して画像の側面を塗りつぶします。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel VerticalTile  -background coral \
          -filter point -distort SRT 0     +repage virtual_vertical.gif
[IM Output]
'VerticalTileEdge' は IM v6.5.0-1 で追加され、仮想キャンバス空間の残りの部分にサイドエッジピクセルを複製します。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel VerticalTileEdge  -background coral \
          -filter point -distort SRT 0     +repage virtual_vertical_edge.gif
[IM Output]
IM v6.5.0-1 では、チェッカーボードパターンを塗りつぶすかのように画像をタイル化するために 'CheckerTile' が追加されました。他の正方形は単に背景色(透明にすることもできます)で塗りつぶされます。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel CheckerTile  -background coral \
          -filter point -distort SRT 0     +repage virtual_checker.gif
[IM Output]
背景を透明にして、その画像を同じサイズの別の完全にタイル化された画像に重ねることで、2つのタイリングをレイヤー化して、2つの画像のインターリーブされたチェッカーボードパターンを作成できます。

  magick -size 96x96 tile:balloon.gif \
          \( tree.gif -alpha set  -set option:distort:viewport 96x96 \
             -virtual-pixel CheckerTile  -background none \
             -filter point -distort SRT 0 \) \
          -flatten  virtual_checker_2.gif
[IM Output]

他にもいくつか珍しい "-virtual-pixel" 設定があります。 'random' は、画像からランダムなピクセルを選択して使用します。

  magick tree.gif  -set option:distort:viewport 70x70-19-19 \
          -virtual-pixel Random -filter point   -distort SRT 0 \
          +repage virtual_random.gif
[IM Output]
これは多くの場合、"-blur" と共に使用され、結果として生じるエッジ効果に粗くまだらな平均画像色を生成します。ピクセル値は一貫しておらず、乱数ジェネレーターに初期 "-seed" が指定されていない限り、ルックアップごとに、さらには操作の実行ごとに異なる効果が生成されることに注意してください。これは、畳み込みまたはモルフォロジー画像処理で使用すると特に問題になります。画像のエッジに沿った各ルックアップは、同じピクセルルックアップが使用された場合でも、異なる値を提供するためです。ただし、パースペクティブ地平線を生成する場合、ランダムパターンは非常に優れていることがわかりました。パターンは、地平線に近づくほどぼやけた結果を示すためです。ぼかしは、単純な単色を使用した場合には見えないであろう深さを、結果のランダムテクスチャに与えます。
しかし、'dither' は、要求された位置の32x32ピクセル内のピクセルに基づいて、順序付けられたディザパターンを返します。
つまり、画像から32ピクセルを超えて進むと、結果は再び画像のコーナーピクセルカラーになります。'edge' と 'random' のマージのようなものです。

  magick tree.gif  -set option:distort:viewport 120x120-44-44 \
          -virtual-pixel Dither -filter point  -distort SRT 0 \
          +repage virtual_dither.gif
[IM Output]
上記では、この32x32ピクセル画像の隅にある太陽からの黄色が、右下の隅までずっと選択されているのがわかりますが、それ以上は選択されていません。つまり、順序付けられたディザカラー選択の32ピクセルの「近傍」の制限です。この画像が大きい場合、黄色の太陽の色は他の隅に到達しません。このパターンは「ランダム」ではなく、常に同じ画像に対して同じ結果を生成します。画像に近い 'random' VP のより順序付けられた形式と考えることができますが、画像から32ピクセル以上処理すると、効果的には 'edge' のようになります。

仮想ピクセルと無限大

"-virtual-pixel" の効果は、一般歪み演算子、特にパースペクティブ歪みの結果ではるかに明確に確認できます。無限遠方への歪んだビューを作成できます。たとえば、ここでは、ツリーのパースペクティブビューでの "-virtual-pixel dither" 設定の結果を示します。これは、この設定が無限遠まで返されるピクセルにどのように影響するかを示しています。

  magick tree.gif -mattecolor DodgerBlue   -virtual-pixel dither \
          -set option:distort:viewport  150x100-50-50 \
          -distort perspective '0,0 9,0  31,0 38,0  0,31 0,18  31,31, 40,18' \
          perspective_dither.gif
[IM Output]
上記の操作を他の "-virtual-pixel" 設定で試して、それらがどのように機能するかをよりよく理解してください。他の例は、遠方の地平線を表示するにもあります。上記のビューの「空」は、実際には "-mattecolor" 設定から生成されていることに注意してください。これは、歪みによって「無効」な領域、この場合はパースペクティブ歪みの「空」を表すために使用されます。"-virtual-pixel" 設定からではありません。

仮想ピクセルの色

"-virtual-pixel" メソッドはいずれも、単色メソッドのいずれか('background'、'transparent'、'background'、'black'、'white'、'gray')を介して specifically 要求されない限り、画像内に既に存在する色とは異なる色または合成色を実際には返しません。つまり、特定の色が追加される場合を除き、新しい色は生成されません(一般歪み演算子の場合は2つ)。もちろん、要求されたピクセルがピクセル補間されているか、エリアリサンプリングされている場合(上記のパースペクティブ歪みビューなど)、これらのメソッドは、選択された "-virtual-pixel" 設定に従って返された色をマージする場合があります。

演算子に対する仮想ピクセルの効果

ここでは、さまざまな演算子を使用した "-virtual-pixel" 設定の効果の影響について説明します。"-blur"...

  magick -size 70x70 xc:lightblue  -fill black -draw 'circle 35,65 25,55' \
          -virtual-pixel edge   -blur 0x8     vp_blur.png
[IM Output]

    magick -size 70x70 xc:lightblue  -fill black -draw 'circle 35,65 25,55' \
            -virtual-pixel mirror  -blur 0x8  vp_blur_2.png
[IM Output]
以下の例では、'tile' の "-virtual-pixel" 設定で "-blur" を使用して画像がどのように相互汚染されるかを確認してください。もちろん、画像が最初からタイル化できる場合は、これが望ましい場合があります。

  magick -size 70x70 xc:lightblue  -fill black -draw 'circle 35,65 25,55' \
          -virtual-pixel tile  -blur 0x8  vp_blur_3.png
[IM Output]
画像の "-virtual-pixel" に特定の色を設定すると、非常に興味深い効果と可能性が生じます。

  magick -size 70x70 xc:lightblue  -fill black -draw 'circle 35,65 25,55' \
          -virtual-pixel background  -background blue \
          -blur 0x8     vp_blur_4.png
[IM Output]

  magick -size 70x70 xc:lightblue  -fill black -draw 'circle 35,65 25,55' \
          -virtual-pixel transparent  -channel RGBA  -blur 0x8 \
          -background red  -flatten       vp_blur_5.png
[IM Output]
画像の背後に配置した「red」の背景が、結果のぼやけた画像が画像の実際のピクセルを取り囲む仮想ピクセルを利用したエッジの周りでどのように表示されるかに注目してください。"-gaussian" は "-blur" と同じ基本的な結果になります。これは、数学的に同一であるため理解できます。

  magick -size 70x70 xc:lightblue  -fill black -draw 'circle 35,65 25,55' \
          -virtual-pixel background   -background blue \
          -gaussian 0x8     vp_gaussian.png
[IM Output]
ただし、"-radial-blur" (実際には回転ぼかし)は、より興味深い境界効果を生成します...

  magick -size 70x70 xc:lightblue \
     -virtual-pixel background  -background blue \
     -radial-blur 0x30    vp_radial.png
[IM Output]
デフォルトの「透明なエッジ」を持つこの最後は、おそらく大きな放射状のぼかし角度で使用すると、滑らかなエッジを生成します。他の手法よりもクリーンな「ビネット」またはソフトエッジングオーバーレイ画像を生成する可能性があります。この効果の使用例については、ソフトでぼやけたエッジを参照してください。"-motion-blur" は、エッジ効果の影響を非常に受けやすいことに注意してください。
さらに悪いことに、「-motion-blur」は現在、「-channel」を使用して特定のチャンネルへの効果を制限する方法を理解していません。

  magick -size 70x70 xc:none  -virtual-pixel edge \
     -fill yellow  -stroke red  -strokewidth 3 -draw 'circle 45,55 35,45' \
     -channel RGBA -motion-blur 0x12+65  vp_motion.png
[IM Output]

  magick -size 70x70 xc:none  -virtual-pixel transparent  \
     -fill yellow  -stroke red  -strokewidth 3  -draw 'circle 45,55 35,45' \
     -channel RGBA -motion-blur 0x12+65  vp_motion_2.png
[IM Output]

  magick -size 70x70 xc:none  -virtual-pixel background -background blue \
     -fill yellow  -stroke red  -strokewidth 3  -draw 'circle 45,55 35,45' \
     -channel RGBA -motion-blur 0x12+65  vp_motion_3.png
[IM Output]

仮想ピクセルのインプロージョン効果

ここでは、さまざまな「-virtual-pixel」設定を使用して、さまざまな大きな値(>1.0)のインプロージョンの興味深い例をいくつか示します。

  for v in edge tile mirror dither random gray; do
    for i in 2 5 10 50 500; do \
      magick koala.gif -virtual-pixel $v \
              -implode $i  implode_${v}_${i}.gif
    done
  done
インプロージョン エッジ タイル ミラー ディザ ランダム グレー
2 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
5 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
10 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
50 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
500 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
上記の点描のような結果は、「-implode」演算子で使用される直接補間サンプリングの直接的な結果です。直接補間ルックアップを参照してください。これは、将来のバージョンのIMでは、エリアリサンプリングを使用して変更される可能性があります。今のところ、結果を改善するには、スーパーサンプリング技術を使用する必要があります。「edge」設定は、奇妙な効果のほとんどを回避するために使用される、より一般的でデフォルトの設定です。その他(「background」を除く)は、基本的に画像内の既存のピクセルから複製されたパターンを生成し、効果は非常に多様です。また、引数は、効果が同様に増加するために、サイズが指数関数的に増加する必要があることに注意してください。また、約200を超える引数の場合は、結果の画像の中央に黒い円が表示される場合があります。これは、コンピューターの数学的限界に達したことが原因です。このような大きな値を使用することはお勧めしません。

単色のランダムスポット

plasma:fractal」キャンバスをぼかし、色を非常に低い値に減らすことで、異なる色のランダムな領域を含む単純な画像を作成できます。ただし、結果は、要求された最終的な色の数と仮想ピクセル設定(上記を参照)によって大きく異なります。この実験では、初期のランダム画像として2つの選択肢がありました。フラクタルプラズマ画像ランダムノイズ画像です。ランダム画像は、その性質上、(「タイル」-virtual-pixel」設定で)より優れたタイル可能な画像を作成できる画像を生成します。一方、プラズマ画像は、色のスポットに長方形のようなエッジを作成する傾向があります。一方、プラズマ画像はかなり素敵なパステルカラーのスポット、またはブロブを生成します。一方、ランダム画像は、中間調の灰色のひどい色合いを生成する傾向があります。このため、これらの実験ではプラズマ画像を使用することにしました。


magick -size 80x80 plasma:fractal -normalize spot_start.gif #magick -size 80x80 xc: +noise Random \ # -virtual-pixel tile -blur 0x5 -normalize spot_start.gif
for n in 2 3 4 5; do for v in edge mirror tile white black; do magick spot_start.gif -virtual-pixel $v -blur 0x10 \ +dither -colors $n spot${n}_${v}.gif done done
色の数 エッジ ミラー タイル
2 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
3 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
4 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
5 [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
最初の3つの画像は、色の「スポット」が画像の端とどのように相互作用するかに非常に具体的な影響を与えます。「Edge」と「Mirror」は、色が90度の角度でエッジに結合する傾向があります。「Random」または「Dither」設定では、色のブロブが画像の端に強く付着しますが、どちらも画像の端の近くに鋭いエッジ効果をもたらします。スポットのエッジをクリーンアップして滑らかにするには、2回目のぼかし-量子化サイクルが必要になる場合があります。「Tile」設定では、スポットが画像の周りをラップする傾向があります。ただし、ソースのプラズマ画像自体はタイル化できないため、長方形のエッジの近くで一般的な色の変化が発生します。タイル化可能なランダム画像をソースとして使用した場合、色のスポットは画像の境界線を完全に無視します。「White」または「Black」の背景仮想ピクセル設定を使用すると、色のスポットは画像の中央に配置される傾向があります。この「センタリング」がどの程度うまくいくかは、使用された「背景色」と比較して、元のランダム画像がどの程度異なっていたかによって異なります。「-blur」のサイズは、基本的にブロブのサイズと滑らかさに影響します。小さなぼかしは小さなスポットをたくさん生成し、上記で使用したような大きなぼかしは、より円形の単一の色のスポットを生成します。
異なる色量子化色空間を使用することで、まったく異なる色のセットと相互作用を作成することもできます。たとえば、ここでは上記の最後の例(5色に減らす)を繰り返しますが、色の選択には、より珍しい「-quantize」色空間を使用します。(色量子化と色空間を参照)
色空間 エッジ ミラー タイル
RGB [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
YIQ [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
HSL [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
XYZ [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
OHTA [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
上記の画像はすべて、同じランダム化されたソース画像から生成されたことに注意してください。表示されるさまざまな効果は、画像内の色の数を減らすさまざまな方法の結果です。画像の境界を越えた領域でぼかしが認識するピクセル色を定義する「-virtual-pixel」設定が、色の領域の形状にどのように大きな影響を与えるかを確認できます。

アノテーション引数の使用方法

IMバージョン6では、テキスト描画用の新しいコマンドラインオプション「-annotate」が提供されました。これは、古い「-draw」メソッドをバイパスして、Annotate() APIを直接使用します。これにより、コマンドラインユーザーにいくつかの新機能が提供されます。この例では、回転が非常に明確になるように、まっすぐな文字であるArial Blackフォントを選択しました。

    magick -font ArialB -pointsize 24 -gravity center \
            -size 55x55 xc:white -annotate 0x0+0+0 'Text' \
            annotate_source.jpg
[IM Output]
このオプションの形式は次のとおりです。
  -annotate {SlewX}x{SlewY}+{X}+{Y} 'Text String' 
上記の_X_と_Y_のオフセットは、描画される注釈付きテキストの重力による影響を受けた位置です。ただし、_SlewX_と_SlewY_は回転の形式を表します。これらの値が両方とも同じである場合、通常の回転が実行されます。しかし、それらが異なると、非常に興味深い効果が生じる可能性があります。
[IM Output]
ご覧のとおり、一部の引数ではテキストが描画されませんでした。基本的に、テキストがすべて1行で描画される場合です。これは予想されることです。ただし、テキストを反転、回転、斜体など、あらゆる方法で描画できることがわかります。非常に便利な画像演算子です。

スプライス:新しい画像演算子の作成

ImageMagickバージョン6の最初のリリース直後、質問への回答として議論が行われました。質問には、画像の中央に余分なスペース(行と列)を追加することが含まれていました。以下の例は、この議論から生じた複雑なコマンドセットであり、IMバージョン6の強力な魔法を使用して、何を行うべきかを正確に詳述しています。この例から、「-splice」演算子が作成されました(詳細については、画像に行と列をスプライシングおよびチョッピングするの例を参照)。そのため、このコマンドラインはこの新しいコマンドの定義操作であり、どちらもまったく同じように機能するはずです。

  magick rose: -size 20x10 xc:blue   -background blue \
          \( -clone 0  -crop 40x0 +repage +clone -insert 1 +append \) \
          -swap 0,-1 +delete +repage \
          \( -clone 0  -crop 0x30 +repage +clone -insert 1 -append \) \
          -delete 0 -delete 0 +repage  splice_rose_seq.gif
[IM Output]
上記では、バラをたくさんの垂直スライスに分割し、そのシーケンスにスペーシング画像を挿入してから、それらをすべて 다시 연결します。基本的に、バラの画像にピクセルの垂直列を追加しました。次に、元の画像を変更した画像に置き換え、同じ操作を水平方向に繰り返しました。作業画像を少しクリーンアップすれば完了です。この例は、メーリングリストに、バージョン6 ImageMagickの新しい順序付きコマンドライン処理と画像シーケンス操作の有用性を強調しました。IMの古いリリースでは、同じ結果を得るために、多数の個別のコマンドと一時画像が必要でした。

境界線、フレーム、および境界線色の使用

-bordercolor」は、「-border」または「-frame」を使用して画像に境界線を追加するためだけに使用する必要があるという議論があります。つまり、多くのユーザーは、透明度のある画像の背後の背景を設定するために使用すべきで_ない_と考えています。たとえば、IMでは、これによりスター画像の透明な領域が「-bordercolor」に設定され、「-background」色の設定は完全に無視されます。

  magick star.gif -bordercolor LimeGreen   -background Gold \
                   -border 10       star_border.gif
[IM Output]
透明な画像の背景を設定するために「-bordercolor」が使用される主な理由は、これにより、ユーザーからの最小限の設定で、透明度を含む可能性のあるランダムな画像セットが指定された場合に、「magick montage」がきれいに表示されるためです。

    magick montage star.gif  -frame 6  -geometry '64x64+5+5>' star_montage.gif
[IM Output]
透明度が維持されている場合、上記の「magick montage」の結果はそれほど良く見えません。
これは、「-border」または「-frame」演算子を使用するときに、画像の透明度を維持できないという意味ではありません。IMに透明度を維持するように指示するために、追加の「-compose」設定を提供する必要があるだけです。

  magick star.gif  -bordercolor LimeGreen \
          -compose Copy  -border 10   star_border_copy.gif
  magick montage star.gif  -bordercolor LimeGreen \
          -compose Copy -background None    -frame 6 \
          -geometry '64x64+0+0>'   star_montage_copy.gif
[IM Output]
[IM Output]
-border」または「-frame」演算子を追加しながら、画像の透明な背景を維持する方法の詳細については、境界線の追加を参照してください。また、「magick montage」については、モンタージュの背景と透明度の処理例を参照してください。提案された代替案の1つは、これらの演算子で画像領域の背景を「-background」色に設定することでしたが、これは「magick montage」での使用を妨げます。もちろん、追加のフレームまたは境界線を追加する前に、画像の透明度を削除することもできます。その場合、「-compose Copy」の使用は無関係になります。

  magick montage star.gif -background Gold -alpha remove \
          -frame 6  -geometry '64x64+5+5>' -size 16x16 \
          -bordercolor LimeGreen  -background SeaGreen \
          star_montage_texture.gif
[IM Output]
境界線がそれを維持し、他の問題を引き起こすのではなく、透明度を維持するために「-compose」設定を使用する方がはるかに簡単です。新しいユーザーには明らかではないかもしれませんが、これらの例ページはすべてそれについて説明しています。

リスト演算子のテスト

以下のすべてのコマンドは、まったく同じ画像を生成するはずですが、すべての画像はわずかに異なる方法で生成され、IMバージョン6の新しい画像リスト演算子が示されています。

  magick eye.gif news.gif  storm.gif  +append  list_test_01.gif
[IM Output]

  magick \( \) eye.gif news.gif  storm.gif  +append  list_test_02.gif
[IM Output]

  magick eye.gif news.gif  storm.gif \( \) +append  list_test_03.gif
[IM Output]

  magick \( eye.gif news.gif  storm.gif \) +append  list_test_04.gif
[IM Output]

  magick \( eye.gif news.gif  storm.gif  +append \) list_test_05.gif
[IM Output]

  magick eye.gif \( news.gif storm.gif +append \) +append list_test_06.gif
[IM Output]

  magick \( eye.gif news.gif +append \) storm.gif +append  list_test_07.gif
[IM Output]

  magick \( storm.gif -flop \) \( news.gif -flop \) \( eye.gif -flop \) \
          +append -flop  list_test_08.gif
[IM Output]

  magick \( eye.gif -rotate 90 \) \( news.gif  -rotate 90 \) \
          \( storm.gif -rotate 90 \) -append  -rotate -90   list_test_09.gif
[IM Output]

  magick eye.gif tree.gif news.gif storm.gif   -delete 1 \
          +append list_test_10.gif
[IM Output]

  magick eye.gif tree.gif news.gif storm.gif  -delete -3 \
          +append list_test_11.gif
[IM Output]

  magick eye.gif news.gif storm.gif tree.gif   +delete \
          +append list_test_12.gif
[IM Output]

  magick news.gif storm.gif eye.gif  +insert  +append list_test_13.gif
[IM Output]

  magick eye.gif storm.gif news.gif  -insert 1  +append list_test_14.gif
[IM Output]

  magick news.gif eye.gif storm.gif   -swap 0,1  +append list_test_15.gif
[IM Output]

  magick storm.gif news.gif eye.gif   -swap 0  +append list_test_16.gif
[IM Output]

  magick eye.gif storm.gif news.gif   +swap  +append list_test_17.gif
[IM Output]

  magick eye.gif storm.gif news.gif   \( -clone 1 \) \
          -delete 1   +append list_test_18.gif
[IM Output]

  magick eye.gif -negate \( +clone -negate \) news.gif  storm.gif \
          -delete 0   +append list_test_19.gif
[IM Output]

  magick storm.gif news.gif eye.gif \( -clone 2,1,0 \) \
          -delete 2,1,0   +append  list_test_20.gif
[IM Output]

  magick storm.gif news.gif eye.gif \( -clone 2-0 \) \
          -delete 0-2   +append  list_test_21.gif
[IM Output]

  magick {balloon,medical,present,shading}.gif  -delete 0--1 \
          {eye,news,storm}.gif   +append  list_test_22.gif
[IM Output]

  magick balloon.gif -delete 0,0,0,0,0,0,0,0,0 \
          eye.gif news.gif  storm.gif  +append  list_test_23.gif
[IM Output]

  magick eye.gif balloon.gif news.gif storm.gif \
          -delete 1,1,1,1,1   +append  list_test_24.gif
[IM Output]

  magick {balloon,medical,present,shading}.gif {eye,news,storm}.gif \
          -delete 0--4   +append   list_test_25.gif
[IM Output]

  magick eye.gif news.gif storm.gif \
          -delete 0--4   +append   list_test_26.gif
[IM Output]

  magick storm.gif news.gif eye.gif -reverse +append  list_test_27.gif
[IM Output]