ImageMagickの例 --
画像のワーピング

目次
ImageMagickの例 前書きと目次
簡単な画像ワーピング (ピクセル順序の並べ替え)
回転とシアリング
円形ワーピング
アニメーション (楽しい例)
このセクションでは、ImageMagickが提供する一般的でより簡単な画像ワーピングと歪み演算子を見ていきます。これは、後のセクションで取り上げるより高度で複雑な歪みに対するあなたの食欲をそそるための方法です。

簡単な画像ワーピング

簡単な画像ワーピング演算子は、画像のピクセルを並べ替えるだけです。ピクセル数や画像のサイズさえも同じままです。重要な機能は、画像が情報を失わず、並べ替えられただけであり、品質を損なうことなく(保存時のJPEGのような不可逆圧縮を除く)非常に簡単に元に戻せることです。基本的には、元の画像の内容を破壊したり、上書きしたり、コピーしたり、色をマージしたり、その他の方法で変更したりすることなく、ピクセルを並べ替えるだけです。画像内のピクセル位置を移動するだけです。[IM 出力]

反転とミラーリング

これらの例では、このかわいいコアラの画像を使用しましょう...
最も簡単な画像の歪みは、画像のピクセルを並べ替えて「-flip」で上下逆さまにすることです。

  magick koala.gif  -flip  flip.gif
[IM Output]
または、「-flop」を使用すると、鏡像を生成できます。

  magick koala.gif  -flop  flop.gif
[IM Output]
IM v6.6.6-5より前は、「-flip」と「-flop」の両方の演算子は、存在する可能性のあるより大きな仮想キャンバスに対する画像の仮想キャンバスオフセットを変更しませんでした。

転置と転回、対角線

-transpose」と「-transverse」の画像操作は、画像の対角線ミラーを生成します。
-transpose」は、画像の左上から右下への対角線に沿って画像をミラーリングします。

  magick koala.gif  -transpose  transpose.gif
[IM Output]
一方、「-transverse」は、画像の左下から右上への対角線に沿って画像をミラーリングします。

  magick koala.gif  -transverse  transverse.gif
[IM Output]
IM v6.6.6-5より前は、「-transpose」と「-transverse」の両方の演算子は、存在する可能性のあるより大きな仮想キャンバスに対する画像の仮想キャンバスオフセットを変更しませんでした。

長方形の回転

上記に示した4種類の操作はすべて、基本的に元の画像の鏡像を生成します。「-rotate」演算子は、元の画像自体を含む、画像のミラーリングされていない他のバージョンを提供します。

  magick koala.gif  -rotate   0  rotate_0.gif
  magick koala.gif  -rotate  90  rotate_90.gif
  magick koala.gif  -rotate 180  rotate_180.gif
  magick koala.gif  -rotate -90  rotate-90.gif
  magick koala.gif  -rotate 360  rotate_360.gif
[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
-rotate」は、回転角度が90度の倍数である場合にのみ、単純な歪みであることに注意してください。他の角度では、画像に他のより複雑なピクセルレベルの歪みが導入されます。以下の回転を参照してください。
回転の正の角度は時計回りであることに気付くかもしれません。これは論理的に正しくないように思われます。ただし、内部的には数学的に正しく、Y軸が否定されていることに起因します。つまり、Y軸は上部の0から下向きに正になります。このため、座標系が逆になり、したがって回転角度も数学的に逆になります。
デジタル写真は、「-auto-orient」演算子を使用することにより、記録されたカメラの向きに合わせて回転させることもできます。これはIM v6.2.7-8で追加されました。

壊れたテレビのような画像のローリング

画像を水平方向に「-roll」することもできます(同期がずれているテレビのように)。ロールの量(画像の変位)はピクセル単位で指定されます。

  magick koala.gif  -roll +0+20  roll_horiz.gif
[IM Output]
もちろん、画像を横にロールすることもできます...

  magick koala.gif  -roll +30+0  roll_vert.gif
[IM Output]
または、負のピクセル数を使用すると、逆方向にロールできます。

  magick koala.gif  -roll +0-20  roll-horiz.gif
[IM Output]
ロールは、画像の「タイル化可能性」を損なうことなくタイルの原点を再配置するため、タイル画像にとって特に重要です。実際、それはまさに「-tile-offset」設定が定義するものであり、「-tile」オプションでタイル画像を読み込むときに適用するロールの量です。

簡単な画像ワーピングの概要

これらの演算子すべての最も重要な点は、結果がまったく操作を実行しなかったかのように正確になるように、さまざまな方法でそれらをすべて一緒に追加できることです。

  magick koala.gif -roll +25+0 -rotate 90  -flop \
          -roll +0-25  -flip  -rotate 90    original.gif
[IM Output]

回転とシアリング

単純な歪み演算子(上記)は画像のサイズと色を保持しますが、次のセットはそうではありません。これらの演算子の結果は、元のサイズ、さらには画像の元のラスターグリッドにも収まりません。

画像の回転 --簡単な画像の回転

上記のように、「-rotate」演算子は、画像を90度単位で回転させる場合、単純で画像を保持する歪みを実行できます。
ただし、他の角度では、回転した画像は長方形の画像にうまく収まりません。したがって、画像データが失われないように、回転した画像を収容するのに十分な大きさになるように、最終的な画像のサイズが拡大されます。

  magick koala.gif -rotate 30 rotate.jpg
[IM Output]
回転の方向は時計回りであることに注意してください。これは、画像座標系が、数学的な標準である左下ではなく、画像の左上を基準にしていることに気付くまで、数学的に非論理的に見えるかもしれません。その結果、回転角度は論理的に予想されるものとは反対になります。これは、数学的な回転と比較して、あらゆる形式の画像回転を扱う場合に留意することが重要です。
ImageMagickによって追加された余分なスペースは、現在の「-background」色の設定で色付けされます。これにより、角に塗りつぶす色を指定できます。

  magick koala.gif -background lightskyblue -rotate 30 rotate_color.png
[IM Output]
もちろん、透明色で塗りつぶしたい場合は、画像が透明度を処理できることを確認する必要があります(アルファチャネルの追加を有効にすることにより)、透明度を処理できる画像形式で保存する必要があります。

  magick koala.gif -alpha set -background none -rotate 30 rotate_trans.png
[IM Output]
余分なスペースが黒で表示される場合、出力画像の出力形式ではアルファチャネルの使用が許可されていません(おそらくJPEG形式)。したがって、透明度はデフォルトで黒になります。
バージョン6.1.2より前は、「-rotate」は透明度を正しく処理せず、回転した画像の角に黒と透明のストライプを生成していました。この問題の回避策はかなり複雑で、アルファチャネルを色とは別に回転させる必要がありました。
しかし、その余分なスペースを望まず、画像の元のサイズを保持したい場合はどうすればよいでしょうか。その場合は、中央揃えの「-crop」を使用して画像を元のサイズに戻すことができます。元のサイズがわからない場合は、アルファ合成トリック(「Src」合成メソッドを参照)を使用して、画像を元のサイズに戻すことができます。

    magick koala.gif -alpha set \( +clone -background none -rotate 30 \) \
            -gravity center  -compose Src -composite   rotate_resized.png
[IM Output]
-rotate」演算子は、2つの追加フラグも理解します。 '>'記号が回転引数に追加された場合(数値の前または後)、画像が高さよりも広い場合にのみ、画像が回転します。つまり、「90>」は、すべての画像が「縦長」スタイルになるように、「横長」スタイルの画像のみを「縦長」スタイルに回転させます。もう1つのフラグ'<'は逆の操作を行い、幅よりも高い画像のみを回転させます。たとえば、「90<」は、すべての画像が「横長」であることを確認します。このフラグのもう1つの用途は、「縦長」および「横長」の画像を異なる量で回転させることです。つまり、「縦長」をある方向に回転させ、「横長」を別の方向に回転させるように、2つの異なる「-rotate」操作を実行できます。デジタル写真は、「-auto-orient」演算子を使用することにより、画像のカメラの向き(画像のEXIFメタデータに基づく)に合わせて回転させることもできます。ただし、JPEG形式で保存し直すことはお勧めできないことに注意してください。

回転演算子の内部構造

IMv7.7.3-4の時点で、回転演算子歪み演算子スケール-回転-並進(SRT)歪みを使用するようになりました。
これが、基礎となるSRT歪みを使用した、より直接的な回転です。

  magick koala.gif -virtual-pixel background -background lightskyblue \
          -distort SRT 30 +repage rotate_srt.jpg
[IM Output]
または、歪み演算子の「+」バージョンを使用して、キャンバスサイズを調整します。

  magick koala.gif -virtual-pixel background -background lightskyblue \
          +distort SRT 30 +repage rotate_srt2.jpg
[IM Output]
回転の中心の正確な位置、スケーリング、フィルター制御、出力画像サイズ、および画像レイヤーの制御など、一般的な歪み演算子によって提供される他の多くの制御があります。より簡単な回転演算子は提供しません。 IMv7.7.3-4より前は、回転演算子は、単純な90度回転歪みの後に、3つの画像シアを使用する、'Rotate by Shear'(RBS)として知られる手法を使用して実装されていました。Alan Paethの研究論文で最初に公開された手法。残念ながら、これには3つの個別のシアリング操作が必要になるため、特に細い線をシアリングすると、非常にばらつきが大きく、ひどいぼかし効果が発生します。これが、回転が現在歪みを使用して実装されている理由です。この回転の有害な影響は、以下のアニメーションで確認できます。回転を「シア」として実行したライブラリ関数は、APIでは引き続き使用できますが、コマンドラインからは、シアを自分で実行しない限り、使用できなくなりました。手法の詳細については、以下のシア演算子を参照してください。さまざまな画像回転アルゴリズム、それらの動作方法、および関連する問題についてのより深い理解については、Leptonicaの回転を参照してください。また、一般的な歪み手法で使用されている例も参照してください。

画像のシアリング --線形変位

-shear」演算子は、ピクセルの各行(または列)をスライドさせて、各行(または列)が隣接する行(または列)に対して同じ量だけ変位するようにします。その2つの引数は、角度で与えられます。「-rotate」と同様に、この操作では、情報を失わないように結果の画像のサイズが大きくなります。ただし、シアリングは実際には二重操作であるため、より複雑です。

  magick koala.gif -background Blue  -shear 20      shear_rot.gif
  magick koala.gif -background Blue  -shear 20x0    shear_x.gif
  magick koala.gif -background Blue  -shear 0x50    shear_y.gif
  magick koala.gif -background Blue  -shear 20x50   shear_xy.gif
  magick koala.gif -background Blue  -shear 20x0  -shear 0x50   shear_xy2.gif
  magick koala.gif -background Blue  -shear 0x50  -shear 20x0   shear_yx.gif
[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]
結果を見ると、完全なX-Y「-shear」(4番目の画像)は、実際には最初にXシアリングを行い、次にYシアリングを行う(適切な画像のトリミング付き)のと同じです(5番目または最後から2番目の画像に表示)。シアリングの順序によって結果が異なることに注意してください。引数に「x」がない1つの数値のみが指定されている場合(最初の画像のように)、「-shear」は、貧弱な回転のようなものとして、X方向とY方向の両方に適用します。
-background」色の設定は、もちろん、追加された余分なスペースの色として使用されます。

  magick koala.gif  -background none  -shear 30  shear_trans.png
[IM Output]
IMバージョン6.1.2より前では、「-shear」は透明度を処理しませんでした。この問題の回避策はかなり複雑で、アルファチャネルを色とは別にシアリングする必要がありました。
このように「-shear」を使用することは、画像を回転させるための正しい方法ではないことに注意してください。実際にシアリングを使用して画像を適切に回転させるには、「-shear {X}x{Y} -shear {X}x0 -crop ...」の形式で複数のシアリング操作を実行する必要があります。ただし、「{X}」、「{Y}」、および最終的なトリミングに適切な値を求めるには、三角法が必要です。「回転演算子」は、実際にはこの方法で実装されていました。この操作を行うためのAPI関数はまだ利用可能ですが、コマンドラインからは利用できなくなりました。
X方向にシアリングしても画像の高さには影響せず、Y方向にシアリングしても画像の幅には影響しないことに注意してください。その結果、画像内のオブジェクトによってカバーされる領域は変化しません(画像を保持する周囲のコンテナのみ)。
シアリング演算子は、ソース画像の直接的な「ワーピング」(個々の行と列のピクセルのみを歪ませる)として実装されます。その結果、補間設定または仮想ピクセル設定は使用されません。

結果として、画像に追加された領域は現在の「-background」色のみで塗りつぶされ、画像の元の色を保持する方法は提供されていません。
画像フィルター、補間、および仮想ピクセルの使用を可能にする代替方法については、アフィン歪みを参照してください。アフィン行列を使用してシアリングを実装する方法については、アフィンシアリングを参照してください。ただし、どちらの方法でも、角度引数を使用してシアリングを指定することはできません。

シアリングを使用した等角投影立方体

シアリングは、使用するのに最も素晴らしくも単純でもない演算子ですが、それによって凝ったことができないという意味ではありません。以下は、「-shear」を使用して等角投影の立方体を作成する例です。

  # Create some square images for the cube
  magick logo: -resize 256x256^ -gravity center -extent 256x256 top.jpg
  magick ../img_photos/pagoda_sm.jpg           -resize 256x256 left.jpg
  magick ../img_photos/mandrill_orig.png       -resize 256x256 right.jpg

  # top image shear.
  magick top.jpg -resize  260x301! -alpha set -background none \
          -shear 0x30 -rotate -60 -gravity center -crop 520x301+0+0 \
          top_shear.png

  # left image shear
  magick left.jpg  -resize  260x301! -alpha set -background none \
          -shear 0x30  left_shear.png

  # right image shear
  magick right.jpg  -resize  260x301! -alpha set -background none \
          -shear 0x-30  right_shear.png

  # combine them.
  magick left_shear.png right_shear.png +append \
          \( top_shear.png -repage +0-149 \) \
          -background none -layers merge +repage \
          -resize 30%  isometric_shears.png

  # cleanup
  rm -f top.jpg left.jpg right.jpg
  rm -f top_shear.png left_shear.png right_shear.png

[IM Output]
上記は、Wolfgang Hugemann <ImageMagick@Hugemann.de>がIM ExamplesへのUsing IM under Windowsの貢献で作成した同様のWindowsバッチの例から開発されました。上記の画像は正しく結合されていないことに注意してください。プラスアルファ合成を使用する必要がありますが、代わりにオーバーを使用しています。詳細については、マスクされた2つの画像を位置合わせするを参照してください。その結果、3つの画像を正しく位置合わせする際に、ギャップや画像の重複が発生する可能性があります。位置合わせが整数位置合わせに制限されているため、この問題は特に深刻になる可能性があります。より管理しやすい座標で、数学を少しごまかして、はるかに大きなサイズを使用すると、この場合に役立ちます。画像を結合した後、結果を最終サイズに縮小すると、結合に沿ったわずかなずれがシャープになり、クリーンアップされます。同様の別の例ですが、アフィン歪みを使用し、正しいアルファ合成を使用すると、アフィンレイヤーを使用した3Dキューブです。上記のようなキューブを生成するために必要な画像処理を大幅に簡略化する方法です。

画像を波状にする - 正弦波変位

-wave」演算子は、画像に「線形変位」を追加するという点で「-shear」に似ています。ただし、この演算子は、正弦波関数に従ってピクセルの列を垂直方向にのみ変位させます。「-wave」演算子には2つの引数があります。1つ目は、ピクセルが上下に変位する最大高さまたは振幅であり、2つ目はピクセル単位の正弦関数の波長です。

  magick koala.gif -background Blue  -wave 10x64  wave.jpg
[IM Output]
ピクセルは指定された振幅まで変位できるため、そのスペースが実際に必要ない場合でも、画像の上下に必ずそれだけの余分なスペースが追加されることに注意してください。たとえば、波長が画像の幅の2倍になるように引数を調整することで、画像を円弧にすることができます。

  magick koala.gif -background Blue  -wave 20x150  arched.jpg
[IM Output]
この場合、「-chop」、「-shave」、または場合によっては「-trim」操作を使用して、未使用のスペースを削除できます。負の振幅を使用して円弧を反転させ、「-chop」を使用して、「-wave」演算子が追加した未使用のスペースを削除することで、前の例をクリーンアップしてみましょう。

  magick koala.gif -background Blue  -wave -20x150  \
          -gravity South -chop 0x20 arched_2.jpg
[IM Output]
もちろん、「-background」色の設定を使用して、画像に追加された余分なスペースを定義できます。

  magick koala.gif -alpha set -background none  -wave 10x75  wave_trans.png
[IM Output]
上記の例からわかるように、「-wave」は垂直方向または「Y」方向にのみ適用されます。X方向に波を追加する場合は、波を適用する前後に画像を回転させる必要があります。

  magick koala.gif  -rotate -90 -background Blue  -wave -10x75 \
                     -rotate +90  wave_y.jpg
[IM Output]
この手法を使用して、任意の角度で画像に波形または振動を追加できます。この例は、ビブラートフォントスモーキングフォントに示されています。「-wave」のもう1つの制限は、波がゼロからのみ開始することです。つまり、左端の列は変位せず、次のいくつかの行は、(正のX方向)に下向きに変位します。ただし、初期の垂直オフセットに負の振幅を与えない限り。
基本的に、「-wave」演算子では、(現時点では)正弦関数の開始オフセットを指定することはできません。ただし、これは「-splice」を使用して画像のオフセットを追加してから削除することで修正できます。

  magick koala.gif  -splice 19x0+0+0 -background Blue  -wave 10x75 \
                     -chop   19x0+0+0     wave_offset.jpg
[IM Output]
-wave」は、追加された領域の色を定義するために現在の仮想ピクセル設定を利用しませんが、現在の補間設定を調べて、ソースから生成された画像に色をマッピングします。これは、波が画像全体に垂直な帯でピクセルをわずかにぼかす傾向があることを意味します。

円形の歪み

これまでの画像歪みは、画像のデータをわずかにストレッチ、拡大、または圧縮した程度であり、かなり穏やかなものでした。つまり、データはかなりそのままです。これらの次のいくつかの画像演算子を使用すると、元の画像が決定できないほど歪んだ画像になる可能性があります。色がぼやけた混乱にねじれています。また、これらの歪み効果は、画像の端で元の画像の歪みがほとんどない円形の領域に制限されます。つまり、領域演算子を使用してより小さな領域でこれらの演算子を使用できます。その結果は、切り取られ、歪められて、元の場所に貼り付けられたように見えずに、元の画像にブレンドされます。つまり、これらの演算子は、「ローカル」歪みとして知られています。これは、画像のより小さな領域を歪ませるために使用できるためです。

画像のインプロージョン

-implode」演算子は、すべてのピクセルを中心に向かって引き寄せるように画像を歪ませます。それは、画像の中心に真空または「ブラックホール」を貼り付けて、ピクセルをそこに吸い込んでいるようなものです。ただし、最初は非常に小さい値のみを使用し、目的の結果が得られるまで徐々に値を増やすことをお勧めします。ほとんどの初心者は大きすぎる値を使用する傾向があり、結果に失望します。たとえば、これは一般的な画像の爆縮です...

  magick koala.gif -implode .6 implode.gif
[IM Output]
値を大きくしていくと、基本的には円内のすべてのピクセルが忘却の彼方に吸い込まれます。

  magick koala.gif -implode 5 implode_big.gif
[IM Output]
ただし、「1.0」よりも大きい「-implode」値を使用すると、アルゴリズムが実際の画像自体の境界を超えて色を参照し始めるため、仮想ピクセル設定にも影響を受けることに注意してください。デフォルトでは、「-virtual-pixel」設定は「edge」であるため、画像のエッジの色または周囲のフレームは結果に大きな影響を与える可能性があります。たとえば、これら2つの画像は同じですが、1つには白い境界線が追加されています。これは、基本的に、画像の適切な範囲を超えて検索された色を使用している領域を示しています。「-virtual-pixel」設定によって通常定義される領域。

  magick rose: -gravity center -crop 46x46+0+0 +repage \
                                              -implode 3   implode_rose.gif
  magick rose: -gravity center -crop 44x44+0+0 +repage \
                -bordercolor white -border 1  -implode 3   implode_rose_2.gif
[IM Output] [IM Output]
Background」などの異なる仮想ピクセル設定を使用すると、「-border」を追加した場合と同じ効果が得られますが、画像を拡大することはありません。その他の仮想ピクセル設定は、中央の爆縮領域でより興味深い効果を生み出すことができます。たとえば、「Tile」設定を使用すると、非常に歪んだ画像のコピーを追加できます。たとえば、この設定を使用して単純なボックス画像を爆縮します...

  magick -size 94x94 xc:red -bordercolor white -border 3 \
          -virtual-pixel tile     -implode 4   implode_tiled_box.gif
[IM Output]
より多くの「-virtual-pixel」効果については、仮想ピクセルの爆縮効果で調べられています。小さな領域に爆縮されるピクセルの数が増え、爆縮パラメータのサイズが非常に大きくなると、結果は「ピクセル化」されたように見え始めます。より優れた一貫した結果を得るには、スーパーサンプリングと呼ばれる手法を使用して、爆縮が処理するピクセルの数を増やすことができます。基本的には、より大きな画像を使用し(必要に応じてソース画像を拡大)、歪みを適用してから、結果を最終サイズに縮小することで、はるかに優れた結果が得られます。

  magick -size 94x94 xc:red -bordercolor white -border 3 \
          -virtual-pixel tile  -resize 400%  -implode 4 -resize 25% \
          implode_tiled_ss.gif
[IM Output]
ご覧のとおり、より滑らかでリアルな結果が得られ、歪みの内部詳細がはるかに良く表現されています。しかし、スーパーサンプリングでさえ、このような極端な画像では無限大が関わるため、破綻します。注意深く見ると、「点々」とした外観が戻ってくるのがわかりますが、それは中心部に近づくにつれてのみです。
インプロードされる画像の周囲に、より大きな「-border」を使用し、後でそれを再び削除することで、画像の端を内側に向かって中心に歪めることもできます。

  magick koala.gif -bordercolor blue -border 20x20 \
          -implode .5   -shave 18x18  implode_border.jpg
[IM Output]
IMバージョン6.2.1以降では、透明な境界線や透明度のある画像を使用することもできます...

  magick koala.gif -bordercolor none -border 20x20 \
          -implode .5   -shave 18x18  implode_border_trans.png
[IM Output]

画像のエクスプロージョン

-implode」演算子で負の値を使用すると、画像を爆発させることができます。ただし、これは真の爆発というよりも、画像の中心を拡大し、中間半径のすべてのピクセルを端に向かって押し出すようなものです。

  magick koala.gif -implode -2 explode.jpg
[IM Output]
より大きな値を使用すると、基本的に、画像の中心にあるピクセルが、画像の最小寸法の3分の2の大きさの円に拡大されます。

  magick koala.gif -implode -30 explode_big.jpg
[IM Output]
そして、こちらが「スーパーサンプリング」されたバージョンです。

  magick koala.gif -resize 400% -implode -30 \
          -resize 25% explode_big_ss.jpg
[IM Output]
内部の「爆発」の中心色は、画像(または領域)の中心の色によって設定されます。つまり、爆発する前にそのポイントの周りの色を変更することで、爆発の「フラッシュ」効果を制御できます。この色の制御のアニメーション例については、以下のアニメーションを参照してください。インプロードされた画像の別の例については、Flickrでのユーザーhhの貢献を参照してください。

渦巻く画像の渦

-swirl」演算子は、ケーキミキサーのように機能します。引数として指定した度数で、画像を円状に歪めます。

  magick koala.gif -swirl 180 swirl.jpg
[IM Output]
境界線を追加し、「-implode」と組み合わせることで、画像を無に吸い込む渦のような外観を与えることができます。

  magick koala.gif -bordercolor white -border 20x20 \
          -swirl 180 -implode .3  -shave 20x20   whirlpool.jpg
[IM Output]
この歪みの重要な性質は、画像が指定した角度で中心で回転する一方で、円形の端(上記のImplode演算子と同様)は影響を受けないことです。現時点では、渦を全ディスクではなくリングに制限するための「内半径」を指定するパラメーターはありません。これらの渦巻き効果をアニメーション化しており、その様子は以下のアニメーションで確認できます。

アニメーション(楽しい例)

最後に、これらの歪みのいくつかのアニメーションGIFを作成してみましょう。これらについては、アニメーション画像を生成するための簡単なシェルスクリプトを作成しました。これは、独自のテスト画像を使用してダウンロードして試すことができます。ここで重要な点があります。これらの歪みを使用して一連の画像を生成する場合、常に元の開始画像から歪ませる方が、画像を繰り返し増分的に歪ませるよりも優れています。これは、個々の操作では最小限ですが、結果がぼやける回転画像の場合に特に当てはまります。しかし、それを何度も繰り返すと、この結果になります。すべてのスクリプトは、アニメーションを作成するために、「生成された「magick」コマンド」手法を使用します。つまり、シェルスクリプトが長い単一のコマンドを作成し、それが実行されます。これにより、一時ファイルを作成する必要がなくなりますが、デバッグが難しい場合があります。別の方法は、MIFF画像ストリーミングとして知られる方法を使用することです。これは、ループ内で個々の画像を生成し、最終的な「マージ」コマンドに「パイプ」します。これは、例レイヤー画像のプログラムによる配置および地図上のピンでより明確に示されています。
[IM Output] シェルスクリプト「animate_mixer」では、各フレームは元の画像に「-swirl」を使用することによって生成されます。渦巻きは一方向にアニメーション化され、次に連続したサイクルを形成するために戻ります。これは実際には、IMにおける非常に典型的なワーピングアニメーションの例です。このバリエーションは、アニメーションを別の類似した画像にアンラップすることです。
[IM Output] シェルスクリプト「animate_whirlpool」は、各画像フレームで「-swirl」を使用するだけでなく、引数のサイズが増加した「-implode」も使用します。追加されたスペースを示すために「lightblue」の境界線色を使用しましたが、よりリアルな効果を得るためには、代わりに同じ白い背景色を使用するべきでした。
[IM Output] 画像の中央での爆発(スクリプト「animate_explode」を参照)。画像は再び拡大され、画像全体が爆発し、最終的な色を定義するために中央に色のついた点が描画されます。
[IM Output] シェルスクリプト「animate_flex」を使用すると、「-wave」関数の振幅を正と負の両方に変更することで、画像の中央が上下に曲げられます。
[IM Output] シェルスクリプト「animate_flag」を使用して、「オフセット波」アニメーションを作成し、画像を旗のように波立たせます。アニメーションは、画像の各フレームを垂直方向にオフセットして左端が一定のままになるようにし、おそらく旗竿を追加することによって改善できます。ただし、それにはオフセットを数学的に決定する必要があります。これは難しい場合があります。
[IM Output] スクリプト「animate_rotate」は、この回転アニメーションを生成しましたが、上記のように、元の画像サイズを保持するために各フレームを元の画像でトリミングします。
更新:IMv7.7.3-4以降、回転演算子歪み演算子SRT歪みを使用するようになりました。そのため、前の例では、次の例のようなぼやけの少ない結果が生成されるようになりました。
[IM Output] 比較として、デフォルト設定と「-distort SRT {angle}」コマンドを使用して生成されたコアラの回転を示します。それを生成するために使用するスクリプトは、「animate_distort_rot」です。この回転方法を使用すると画像がどれほど鮮明になるか、また、前のバージョンで明らかだった回転の「ジッター」がどれほど少ないかに注意してください。

ボーナスアニメーションとムービー

[IM Output] ボーナスとして、フランスのFlorent Monnierは、IM OCaml APIスクリプトを使用して作成された「-swirl」歪み演算子を使用した素晴らしいビデオを作成しました。ビデオのフルバージョンをダウンロードするには、右側のGIFアニメーションを選択してください。歪みマップ技術を示す良いビデオを作成できますか?インターネット上のどこかで知っていますか?メールしてください。