使用图形魔术调整动画 GIF 的大小



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

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

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

我已经阅读了有关帧优化的信息 www.imagemagick.org 并且我可以在 www.graphicsmagick.org gifDisposeMethod功能中看到。

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

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

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

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

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

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

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

最新更新