Magick.net调整大小的GIF最终导致文件更大

时间:2018-08-15 18:08:49

标签: imagemagick gif animated-gif magick.net

我正在使用Magick.net调整动画GIF的尺寸,但是尺寸较小的文件最终会具有较大的文件大小。

原始文件:500 x 225,443KB

大小调整后的文件:400 x 180,488KB

这是我的代码

using (var imageColl = new MagickImageCollection(source))
{
  widthOrig = imageColl[0].Width;
  heightOrig = imageColl[0].Height;
  imageColl.Coalesce();
  imageColl.Optimize();
  imageColl.OptimizeTransparency();

  foreach (MagickImage image in imageColl)
  {
    var (width, height) = GetNewSize(widthOrig, heightOrig, 400);

    image.Resize(width, height);
  }

  // saving file omitted
}

有人可以指出调整大小后我缺少的东西吗?谢谢。

1 个答案:

答案 0 :(得分:0)

原因是GIF包含有限数量的颜色(最多256种)。如果从较少的颜色开始调整大小,则调整大小会在相邻像素之间插值并产生新的颜色。除非您再次将颜色限制为原始颜色,否则文件将具有更多颜色,因此文件大小也会更大

对于单个gif图像,在Imagemagick中,您可以首先制作输入中唯一颜色的色表图像。

convert input.gif -unique-colors  colortable.gif


(请参见https://www.imagemagick.org/Usage/quantize/#extract)。

然后在调整大小后使用-remap to将相同的颜色重新应用到调整后的图像中。

convert input.gif -resize WxH +dither -remap colortable.gif resized.gif


(请参见https://www.imagemagick.org/Usage/quantize/#remap

如果具有动画gif,则需要找到每个框架的颜色数量并为每个框架创建一种可着色的颜色。或创建一种跨越动画中颜色的可着色对象。然后,您将分离动画的帧,并对每个帧应用可着色的颜色。然后将帧重新组合成动画。

在此链接-https://www.imagemagick.org/Usage/video/#gif中,采用了相同的概念将电影转换为gif动画。请注意,在此链接中-map是-remap的古老术语。因此,请使用-remap。