使用GraphicsMagick调整动画GIF的大小

时间:2011-05-23 14:16:54

标签: c++ linux image-processing imagemagick image-manipulation

我有一个带透明框架的动画gif图片。 我需要调整它的大小。

在调整大小之前,我使用Magick::coalesceImages函数,在调整图像大小后,我使用Magick::writeImages函数将所有gif帧收集回一个单独的图像。

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

我已阅读www.imagemagick.org上有关帧优化的内容,此外我还可以在www.graphicsmagick.org gifDisposeMethod函数上看到。

我的问题是,如何让调整大小的动画gif图片使用透明度框架并避免增加图片KBytes尺寸?

1 个答案:

答案 0 :(得分:3)

好吧,我找到了要走的路:

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

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

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

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

这样我们就不会增加每个帧的大小,因为我们没有使用Magick::coalesceImages()函数,而是根据原始大小调整每个帧的大小,所以我们对帧的透明度没有任何问题