ImageMagick 範例 --
影像變形

索引
ImageMagick 範例 前言與索引
簡單影像變形(重新排列像素順序)
旋轉和剪切
圓形變形
動畫 (有趣的例子)
在本節中,我們將探討 ImageMagick 提供的一般和較簡單的影像變形和扭曲運算子。這將 whet 您的食慾,以了解我們將在後續章節中探討的更進階和複雜的扭曲。

簡單影像變形

簡單影像變形運算子僅會重新排列影像中的像素。像素數量甚至影像大小都保持不變。關鍵特性是影像不會遺失任何資訊,僅會重新排列,並且可以很容易地恢復正常,而不會損失任何品質(儲存時不包括類似 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」運算子都不會修改影像相對於可能存在的較大虛擬畫布的虛擬畫布偏移量

矩形旋轉

上述所有四種類型的運算基本上都會產生原始影像的鏡像影像。「-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]
當然,如果您想用透明顏色填充,您需要確保影像可以處理透明度(通過啟用添加 Alpha 通道),並且保存為可以處理透明度的影像格式。

  magick koala.gif -alpha set -background none -rotate 30 rotate_trans.png
[IM Output]
如果額外空間顯示為黑色,則您的輸出影像輸出格式不允許使用 alpha 通道(很可能是 JPEG 格式),因此透明度默認為黑色。
在 6.1.2 版本之前,「-rotate」無法正確處理透明度,會在旋轉影像的角落產生黑色和透明條紋。 這個問題的解決方法相當複雜,需要將 Alpha 通道與顏色分開旋轉。
但是如果您不想要額外的空間,想要保留圖像的原始大小怎麼辦?您可以使用置中的 "-crop" 將圖像恢復為原始大小。如果您不知道原始大小,可以使用 Alpha 合成技巧(請參閱「Src」合成方法)將圖像恢復為原始大小。

    magick koala.gif -alpha set \( +clone -background none -rotate 30 \) \
            -gravity center  -compose Src -composite   rotate_resized.png
[IM Output]
"-rotate" 運算子也接受兩個額外的標誌。如果在旋轉參數中添加「>」符號(在數字之前或之後),則僅當圖像的寬度大於高度時才會旋轉圖像。也就是說,「90>」只會將「橫向」(寬)樣式的圖像旋轉為「縱向」(高)樣式的圖像,以便所有圖像都是「縱向」樣式。另一個標誌「<」則相反,僅旋轉高度大於寬度的圖像。例如,「90<」將確保所有圖像都是「橫向」。此標誌的另一個用途是將「縱向」和「橫向」圖像旋轉不同的角度。也就是說,您可以給出兩個不同的 "-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 度旋轉扭曲 和三個 圖像剪切 來實現的,這是一種稱為「透過剪切旋轉」(RBS) 的技術。這項技術最初是由 Alan Paeth 在研究論文中發表的。不幸的是,由於這需要 3 個獨立的剪切操作,因此會產生高度可變且嚴重的模糊效應,尤其是在剪切細線時,這就是現在使用扭曲來實現旋轉的原因。您可以在下面的旋轉 動畫 中看到這種方法的不利影響。在 API 中仍然可以使用執行「剪切」旋轉的程式庫函數,但除非您自己進行剪切,否則無法再從命令列使用該函數。有關該技術的完整詳細資訊,請參閱下面的 剪切運算子。如需更深入地了解各種圖像旋轉演算法、它們的工作原理以及所涉及的問題,請參閱 Leptonica 旋轉。以及 通用扭曲技術 中使用的範例。

剪切圖像 -線性位移

"-shear" 運算子會取得每一列(或每一行)像素並沿著滑動,以便每一列(或每一行)相對於相鄰列(或相鄰行)偏移相同的量。它的兩個參數以角度表示。與 "-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"(第四張圖)實際上等同於先進行 X 軸剪切,然後進行 Y 軸剪切(並進行適當的圖像裁剪),如倒數第二張圖所示。請注意,剪切的順序會產生不同的結果。如果只提供一個數字(參數中沒有任何「x」,如第一張圖所示),則 "-shear" 會將其應用於 X 和 Y 方向,作為一種簡陋的旋轉方式。
當然,"-background" 顏色設定用於添加的額外空間的顏色。

  magick koala.gif  -background none  -shear 30  shear_trans.png
[IM Output]
在 IM 6.1.2 版本之前,"-shear" 不處理透明度。這個問題的解決方法相當複雜,需要將 Alpha 色板與顏色分開進行剪切。
請注意,以這種方式使用 "-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> 從類似的Windows 批次檔範例 所開發,收錄於他為 IM 範例撰寫的在 Windows 下使用 IM中。請注意,以上圖片並未正確接合。它們應該使用正片 Alpha 合成,但卻使用了覆蓋。如需更多資訊,請參閱對齊兩個遮罩影像。因此,您可能會在正確對齊三個影像時遇到問題,導致間隙或影像重疊。由於定位僅限於整數定位,因此這個問題可能會特別嚴重。在這種情況下,使用更大的尺寸、更容易管理的座標,以及稍微調整數學計算,將有所幫助。合併影像後,將結果縮小到最終大小將使接合處的任何輕微偏差變得清晰可辨。另一個類似的範例是使用仿射變形和正確的 Alpha 合成,請參閱使用仿射分層的 3D 立方體。這個方法可以大幅簡化產生上述立方體所需的影像處理。

波浪影像 - 正弦波位移

"-wave" 運算子和 "-shear" 類似,它會將「線性位移」新增至影像。然而,此運算子只會根據正弦波函數垂直位移像素列。"-wave" 運算子有兩個參數。第一個是像素向上或向下位移的最大高度或「振幅」,而第二個是正弦函數的「波長」(以像素為單位)。

  magick koala.gif -background Blue  -wave 10x64  wave.jpg
[IM Output]
請注意,由於像素可以位移到指定的「振幅」,因此即使實際上不需要額外的空間,也會始終在影像的頂部和底部添加該空間。例如,通過調整參數使「波長」為影像寬度的兩倍,您可以將影像變成弧形。

  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" 的另一個限制是波浪只能從零開始。也就是說,最左邊的列沒有位移,而接下來的幾列向下位移(正 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」設置為「邊緣」,因此圖像上的邊緣顏色或周圍邊框可能會對結果產生重大影響。例如,這兩張圖像是相同的,只是其中一張添加了白色邊框。這基本上顯示了使用從圖像本身邊界以外查找的顏色的區域。該區域通常由「-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]
使用不同的虛擬像素設置(例如「背景」)將產生與添加「-border」相同的效果,但不會放大圖像。其他虛擬像素設置可以在中央內爆區域產生更有趣的效果。例如,使用「平鋪」設置可以添加高度扭曲的圖像副本。例如,在這裡,我使用此設置內爆了簡單的框圖像...

  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]
使用更大的值基本上會將圖像最中心的像素放大到一個圓圈中,該圓圈的大小是最小圖像尺寸的三分之二。

  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]
內部「爆炸」的中心顏色由圖像(或區域)中心的顏色設定。這意味著通過在爆炸前改變該點周圍的顏色,您可以控制爆炸的「閃光」效果。請參閱下面的「動畫」,查看此顏色控制的動畫範例。有關內爆圖像的另一個範例,請參閱使用者 hh 在 Flickr 上的貢獻。

旋轉影像漩渦

-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]
這種變形的關鍵特性是圖像將在其中心旋轉您指定的角度,而圓形邊緣(如上面的「內爆運算符」)保持不變。目前,沒有參數可以指定「內半徑」來將旋轉限制在環形內,而不是整個圓盤。我已經將這些旋轉效果製作成動畫,您可以在下面的「動畫」中看到。

動畫(有趣的例子)

最後,讓我們生成一些這些變形的 GIF 動畫。為此,我生成了一些簡單的 shell 腳本來生成動畫圖像,您也可以下載這些腳本並使用您自己的測試圖像進行試驗。這讓我想起了一個重點。如果使用這些變形生成一系列圖像,最好始終從原始起始圖像進行變形,而不是反覆遞增地變形圖像。對於旋轉圖像尤其如此,其中結果會有一些模糊,儘管在任何單獨的操作中都是最小的,但是,如果您反覆這樣做,這就是結果。所有腳本都使用「生成的“magick”命令」技術來創建動畫。也就是說,shell 腳本會創建一個長的單命令,然後執行該命令。這避免了生成臨時文件的需要,儘管可能難以調試。另一種選擇是使用方法,稱為 MIFF 圖像流,它在循環中生成單個圖像,並將其「管道化」到最終的「合併」命令中。這在範例「分層圖像的程式化定位」和「地圖中的圖釘」中有更清楚的說明。
[IM Output] shell 腳本「animate_mixer」中的每一幀都是通過在原始圖像上使用「-swirl」(旋轉)生成的。旋轉動畫沿一個方向進行,然後再返回以形成連續循環。這實際上是 IM 中非常典型的扭曲動畫範例。這種方法的一種變體是讓動畫反向扭曲成不同但相似的圖像。
[IM Output] 這個 shell script「animate_whirlpool」不僅對每個圖像幀使用「-swirl」,還會使用遞增參數大小的「-implode」。我為添加的空間使用了「lightblue」邊框顏色,以顯示整個圖像將被「吸入排水管」,但我應該使用相同的白色背景顏色,以獲得更好、更逼真的效果。
[IM Output] 圖像中間的爆炸(請參閱腳本「animate_explode」)。圖像再次被放大,因此整個圖像都被炸開,並且在中心繪製一個彩色點以定義最終顏色。
[IM Output] 使用 shell script「animate_flex」,通過正負改變「-wave」函數的振幅,可以上下彎曲圖像的中心。
[IM Output] 使用 shell script「animate_flag」,我創建了一個「偏移波」動畫,使圖像像旗幟一樣飄揚。通過垂直偏移圖像的每一幀,使左側邊緣保持不變,並可能添加旗桿,可以改進動畫。但是,這需要您以數學方式確定該偏移量,這可能會很棘手。
[IM Output] 腳本「animate_rotate」生成了這個旋轉動畫,但會使用原始圖像裁剪每一幀,如上所述,以保留原始圖像大小。
更新:從 IMv7.7.3-4 開始,旋轉運算符現在使用扭曲運算符SRT 扭曲。因此,前面的示例現在將產生與下一個示例相比更加清晰的結果。
[IM Output] 作為比較,以下是使用默認設置和「-distort SRT {angle}」命令生成的無尾熊旋轉。用於生成它的腳本是「animate_distort_rot」。請注意,使用這種旋轉方法時,圖像清晰度更高,並且沒有前一版本中明顯的旋轉「抖動」。

額外動畫和影片

[IM 輸出] 作為額外的內容,來自法國的 Florent Monnier 使用「-swirl」扭曲運算符創建了一個漂亮的影片,該影片是使用 IM OCaml API 腳本製作的。選擇右側的 GIF 動畫以下載完整版的影片。 您可以製作一部展示扭曲映射技術的優秀影片嗎?您在網路上其他地方看過嗎?請發送郵件給我。