ImageMagick - 從平鋪影像建立動畫 GIF,在「虛擬畫布」元資料方面遇到問題

ImageMagick - 從平鋪影像建立動畫 GIF,在「虛擬畫布」元資料方面遇到問題

我有一個包含與此類似的較小圖像的圖像:

------
| 1  |
------
| 2  |
------
| 3  |
------
| 4  |
------

每個子圖為100x200,整圖為100x800

我想將它們全部組合成一個動畫,該動畫將循環顯示圖像 1 到 4。

我使用 imagemagick 的convert工具來裁剪圖像。例如我製作了一個批次文件

convert %1 -crop 100x200+0+0 %~n1_01.png
convert %1 -crop 100x200+0+200 %~n1_02.png
convert %1 -crop 100x200+0+400 %~n1_03.png
convert %1 -crop 100x200+0+600 %~n1_04.png

然後在名為的映像上運行它main.jpg

這會創建一組圖像,但是當我嘗試將它們轉換為 gif 時,如下所示

convert *.png out.gif

我得到的不是尺寸為 100x200 的單一動畫,而是尺寸為 100x800 的動畫,並且圖像只是在某些偏移處彈出。

當我identify裁剪幾張圖像時,它給了我

main_01.png PNG 100x200 100x800+0+0 8-bit sRGB 4.74KB 0.000u 0:00.000
main_02.png PNG 100x200 100x800+0+200 8-bit sRGB 3.39KB 0.000u 0:00.000

據推測,imagemagick 試圖透過讀取元數據並確定我實際上想要使用 100x800 畫布,並且每個圖像應放置在特定的偏移量來提供幫助。這不是我想要的。

確實,閱讀教學,imagemagick 確實將其留在那裡以幫助您。

也就是說,IM 保留影像的「虛擬畫布」、「頁面」或「分層」訊息,以便保存以供以後使用。這對於正確處理 GIF 動畫尤其重要。

當我在繪畫中手動打開每個文件然後重新保存它時,當我重新識別時main_02.png,我得到

main_02.png PNG 100x200 100x200+0+0 8-bit sRGB 4.03KB 0.000u 0:00.000

對所有圖像執行此操作,我再次轉換為 gif,最後它是一個 100x200 gif,看起來像我想要的。

如何將所有偏移量設為 (0, 0),這樣我就不必透過繪製手動完成此操作?

答案1

+repage您可以透過在裁切後執行以下操作來重設虛擬畫布座標:

convert %1 -crop 100x200+0+0 +repage %~n1_01.png
convert %1 -crop 100x200+0+200 +repage %~n1_02.png
convert %1 -crop 100x200+0+400 +repage %~n1_03.png
convert %1 -crop 100x200+0+600 +repage %~n1_04.png

此外,您不需要批次檔來將影像分割成圖塊;如果您僅指定大小,它將為您分割成圖塊,請在輸出檔名中使用“%d”作為圖塊編號:

convert %1 -crop 100x200 +repage %~n1_%d.png

或在您的情況下使用兩位數的固定寬度數字:

convert %1 -crop 100x200 +repage %~n1_%02d.png

這將生成四個圖像。

事實上,您也可以在同一命令中進行 GIF 轉換,而無需產生臨時中間影像檔案。以下命令將一次完成您想要的所有操作:

convert %1 -crop 100x200 +repage out.gif

欲了解更多信息,請參閱的文檔-crop並且+repage(請注意,它-repage也可用於單獨編輯任何影像中的虛擬畫布資料)。


順便說一下,分割影像的另一種方法是指定數位瓷磚的數量而不是瓷磚的尺寸;您可以透過指定大小來做到這一點在瓷磚中裁剪並附加“@”符號,例如,這會產生與上面相同的結果:

convert %1 -crop 1x4@ +repage %~n1_%02d.png

相關內容