Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用GraphicsMagick调整动画GIF的大小_C++_Linux_Image Processing_Imagemagick_Image Manipulation - Fatal编程技术网

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字节仍然比原始图像大。我真的不明白为什么我会有一个更大的形象