(原)關於使用imagemagick將gif疊加到圖片或者畫布上的方法,以及疑難雜症


    今天因為項目過程中,有一個小需求,需要將一個指定的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM