如何使用ImageMagick裁剪动画gif?

jim*_*try 56 crop imagemagick animated-gif

有关裁剪图像的大量信息,但尝试裁剪(或修剪)动画会产生奇怪的结果.有时它们闪烁,或带有额外的帧,或者某些帧正确裁剪而其他帧变得偏移.我如何防止这一切发生?

jim*_*try 77

convert input.gif -coalesce -repage 0x0 -crop WxH+X+Y +repage output.gif
Run Code Online (Sandbox Code Playgroud)
  • GIF动画通常经过优化以节省空间,但在应用裁剪命令并单独处理每个帧时,imagemagick似乎并未考虑这一点.-coalesce重建完整的帧.
  • 其他命令将考虑原始gif中提供的偏移信息,因此您需要强制重置它-repage 0x0.
  • 作物本身很简单,分别提供宽度,高度,x偏移和y偏移.例如,裁剪40宽30高,x偏移50 = 40x30 + 50 + 0.
  • 裁剪不会删除它从图像中剪切的画布.+repage在庄稼之后施用将会这样做.

  • 这比 gifsicle 慢,而且从我的 600kB 生成 16MB 文件 (3认同)

小智 33

即使有了合并和重复,我也无法让ImageMagick很好地裁剪和调整GIF动画.

我发现了一个名为Gifsicle的程序,它非常适合操纵GIF动画.

gifsicle --crop 0,0-100,100 --output out.gif in.gif
Run Code Online (Sandbox Code Playgroud)

它还可以执行各种其他操作.看看这个!

  • 前 2 个数字是以像素为单位的左上角坐标,其他 2 个数字是要裁剪区域的右下角坐标。 (3认同)
  • 您可以使用“--crop X1,Y1-X2,Y2”输入要在其之间进行裁剪的右上角和左下角坐标,或使用“--crop X1,Y1+WxH”指定裁剪的宽度和高度你想要的区域 (2认同)

fmw*_*w42 6

动画通常会经过优化,这意味着某些帧比其他帧小。因此,在 ImageMagick 中,您可能希望在裁剪之前合并动画。

convert in_animation.gif -coalesce -crop WxH+X+Y +repage -layers optimize out_animation.gif
Run Code Online (Sandbox Code Playgroud)


您可能需要在读取输入动画之前添加 -dispose 方法以避免闪烁。如果您想进行更改,还可以在最后设置 -delay 和 -loop 。

http://www.imagemagick.org/Usage/anim_basics/#dispose http://www.imagemagick.org/Usage/anim_basics/#coalesce http://www.imagemagick.org/script/command-line-options。 php#层