今天由於項目過程當中,有一個小需求,須要將一個指定的gif按照指定大小,疊加到畫布的指定位置上,原本對於熟悉這塊的人,簡直就是小菜一碟哈,但本人由於對imagemagick的不熟悉,致使在這個需求上摸索了一天才解決問題,因此寫下這篇博文,防止後期忘記了這段過程。html
第一步需求是,將GIF調整到指定的大小尺寸:oop
使用命令:convert 5832.gif -coalesce -resize 92x92! 92.gif測試
這條命令是強制將輸入的gif調整爲指定的大小,其中和圖片不一樣的調整,是這個中間多了一個 coalesce 選項,這個是專門用於GIF動畫序列的。動畫
合成出來的效果爲:spa
第二步需求是將這個調整好的GIF序列,疊加到一個透明的大小畫布上去,按指定位置座標疊加3d
初次使用命令:htm
convert -size 191x191 xc:none null: 92.gif -geometry +99+2 -layers Composite -loop 0 33.gifblog
合成出來的效果圖像有重影,效果:圖片
而後找了半天的問題,調整命令:ip
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