我有一個包含與此類似的較小圖像的圖像:
------
| 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