今天因為項目過程中,有一個小需求,需要將一個指定的gif按照指定大小,疊加到畫布的指定位置上,本來對於熟悉這塊的人,簡直就是小菜一碟哈,但本人因為對imagemagick的不熟悉,導致在這個需求上摸索了一天才解決問題,所以寫下這篇博文,防止后期忘記了這段過程。
第一步需求是,將GIF調整到指定的大小尺寸:
使用命令:convert 5832.gif -coalesce -resize 92x92! 92.gif
這條命令是強制將輸入的gif調整為指定的大小,其中和圖片不同的調整,是這個中間多了一個 coalesce 選項,這個是專門用於GIF動畫序列的。
合成出來的效果為:
第二步需求是將這個調整好的GIF序列,疊加到一個透明的大小畫布上去,按指定位置坐標疊加
初次使用命令:
convert -size 191x191 xc:none null: 92.gif -geometry +99+2 -layers Composite -loop 0 33.gif
合成出來的效果圖像有重影,效果:
然后找了半天的問題,調整命令:
convert ( -size 483x483 xc:none ) ( 5832.gif -coalesce -resize 643x643! -repage +68+64 ) 773_0.gif
解決GIF重影效果,合成后的效果如圖:
這個時候以為完全解決問題了,結果測試同學,測試了幾個例子,當前期的GIF圖像比畫布大的時候,超過畫布范圍的時候,就出現了問題,如果需要將這個合成后的GIF丟到ffmpeg中進行解碼處理,或者將這個合成后的gif轉成mp4,就出現了下面的這個問題:
通過針對這個情況,和ffmpeg中的源碼,我懷疑是gif中的頭文件對圖像的寬高和實際圖像的寬高不一致導致的,於是繼續模式和調整命令,調整為:
convert -size 960x540 xc:none null: "(" 5832.gif -coalesce -resize 220x220! +repage ")" -geometry 960x540+370+160 -layers Composite -set dispose background +repage -loop 0 ./7.gif
修復上述的重影和ffmpeg解碼格式的問題。
轉載注明出處:https://www.cnblogs.com/lihaiping/p/11425849.html