使用GraphicsMagick调整大小的动态GIF

3

我有一个带透明帧的动画 gif 图像,需要改变大小。

在改变大小之前,我使用 Magick::coalesceImages 函数,改变图像大小后,我使用 Magick::writeImages 函数将所有 gif 帧收集到一个单一图像中。

问题是输出的调整大小的图像文件大小比原始文件还要大,因为原始动画 gif 有透明帧,而新调整大小的 gif 没有任何透明的帧。

我已经在 www.imagemagick.org 上阅读了关于帧优化的内容,同时我也可以在www.graphicsmagick.org 上看到 gifDisposeMethod 函数。

我的问题是,如何让调整大小的动态 gif 图像使用透明帧并避免图像 KBytes 大小的增加?


谢谢您纠正我的语法错误,但我真的需要一个答案... - Oded
如果你将帧调整得更大,你会期望它变得更大——像素宽度/高度的差异是什么?文件大小的差异又是多少KB? - Lou Franco
原始图像为230X40,大小为10,896字节。使用Magick :: coalesceImage并将图像调整为213X37后,我得到了108,207字节的图像。 我发现,一旦将图像调整为其原始大小的92%92%,而不使用coalesceImage(因为我使用百分比,每个帧将根据其原始尺寸进行调整,所以我想我可以删除coalesceImage的使用),我得到了一个更小的图像15,226字节,但仍比原始图像大。我真的不明白为什么会出现更大的图像。 - Oded
1个回答

3

好的,我找到了解决方法:

当调整动画 gif 的大小时,使用 Magick::coalesceImages() 不是最佳方式...

相反,我按百分比大小而不是绝对大小进行调整大小,同时跳过 Magick::coalesceImages() 调用。

例如,假设我的原始动画 gif 是 300x300,我想将其调整为 150x150,我会执行以下操作:

  • Magick::Blob 中读取图像
  • 计算百分比数值(在我的演示案例中为 50%x50%)
  • 根据百分比计算调整每一帧图像的大小。

这样我们不会增加每一帧的大小,因为我们没有使用 Magick::coalesceImages() 函数,并且我们根据每帧的原始大小调整每一帧,因此我们不会遇到帧的透明度问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接