我有一个带有透明框架的动画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()
函数,而是根据其原始大小调整每个帧的大小,因此我们对帧的透明度没有任何问题。