zoukankan      html  css  js  c++  java
  • (原)关于使用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

  • 相关阅读:
    JavaEE——Struts(1)--Filter作为MVC的控制器 配置Struts2环境
    折叠菜单--实现左边目录,右边显示
    转载--竖向折叠菜单
    pest错误笔记
    JavaWeb--JQuery中的$(function())
    codeforces 440C. One-Based Arithmetic 解题报告
    codeforces 399B. Red and Blue Balls 解题报告
    codeforces 445B. DZY Loves Chemistry 解题报告
    2013级新生程序设计基础竞赛-正式赛 F 异或最大值 解题报告
    codeforces 441C. Valera and Tubes 解题报告
  • 原文地址:https://www.cnblogs.com/lihaiping/p/11425849.html
Copyright © 2011-2022 走看看