C++ 使用GraphicsMagick调整动画GIF的大小
我有一个带有透明边框的动画C++ 使用GraphicsMagick调整动画GIF的大小,c++,linux,image-processing,imagemagick,image-manipulation,C++,Linux,Image Processing,Imagemagick,Image Manipulation,我有一个带有透明边框的动画gif图像。 我需要调整它的大小 在调整大小之前,我使用Magick::coalesceImages函数,在调整图像大小之后,我使用Magick::writeImages函数将所有gif帧收集回单个图像 问题是,输出大小调整后的图像文件比原始文件大,因为原始动画gif具有透明帧,而新大小调整后的gif没有任何透明帧 我已经阅读了plus上的帧优化,我可以在gifdispemethod函数中看到 我的问题是,如何使调整大小的动画gif图像使用透明帧并避免图像KBytes大
gif
图像。
我需要调整它的大小
在调整大小之前,我使用Magick::coalesceImages
函数,在调整图像大小之后,我使用Magick::writeImages
函数将所有gif
帧收集回单个图像
问题是,输出大小调整后的图像文件比原始文件大,因为原始动画gif
具有透明帧,而新大小调整后的gif
没有任何透明帧
我已经阅读了plus上的帧优化,我可以在gifdispemethod
函数中看到
我的问题是,如何使调整大小的动画
gif
图像使用透明帧并避免图像KBytes
大小增加 嗯,我找到了出路:
调整动画的大小时,使用Magick::coalesceImages()
不是最好的方法
相反,我是根据百分比大小而不是绝对大小来重新zising,同时跳过Magick::coalesceImages()
调用
例如,假设我的原始动画gif
为300x300,我想将其大小调整为150x150,我将执行以下操作:
- 在一个
Magick::Blob中读取图像
- 计算百分比(在我的演示案例中为50%x50%)
- 根据百分比计算调整图像的每一帧大小
通过这种方式,我们不会增加每个帧的大小,因为我们没有使用
Magick::coalesceImages()
函数,我们会根据其原始大小调整每个帧的大小,因此帧的透明度没有任何问题。感谢您修复我的gramer错误,但是我真的可以用一个答案…如果你把帧调整得更大,你会认为它会更大--像素的宽度/高度有什么不同,文件的KB有什么不同?原始图像是230X40 10896字节。在使用Magick::coalesceImage并将图像大小调整为213X37后,我得到了108207字节的图像。我可以看到,一旦我将图像大小调整为其原始大小的92%%92%,而不使用coalesceImage(因为我使用的是前标记,每个帧都将根据其原始尺寸调整大小,因此我想我可以删除coalesceImage用法),我得到的图像会小得多,15226字节仍然比原始图像大。我真的不明白为什么我会有一个更大的形象