Magick.net 调整 GIF 大小,最终获得更大的文件大小



我正在使用 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
}

有人可以指出我在调整大小后缺少什么以获得更小的文件大小吗? 谢谢。

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

对于单个 gif 图像,在 Imagemagic 中,您可以首先为输入中的独特颜色制作颜色表图像。

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,那么您需要找到每帧的颜色数量并为每个帧创建一个可着色的颜色。或者创建一个跨越动画中颜色的可着色对象。然后,您将分离动画的帧,并将可着色应用于每个帧。然后将帧合并回动画。

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

最新更新