【问题标题】:ImageMagick gif creation is very slow (~40 seconds)ImageMagick gif 创建速度很慢(~40 秒)
【发布时间】:2018-10-17 08:09:54
【问题描述】:

我正在尝试用一些位图图像创建一个 gif,它需要很长时间才能加载。为此,我按照库 github 页面上的示例进行操作。

这是我的代码:

    public void SaveAsGif(Stream stream, ICollection<Bitmap> images, float fps, bool loop)
    {
        ICollection<IMagickImage> magickImages = new System.Collections.ObjectModel.Collection<IMagickImage>();
        float exactDelay = 100 / fps;
        foreach (Bitmap bitmap in images)
        {
            MagickImage image = new MagickImage(bitmap);
            image.AnimationDelay = (int) exactDelay;
            if (!loop)
            {
                image.AnimationIterations = 1;
            }

            magickImages.Add(image);
        }

        using (MagickImageCollection collection = new MagickImageCollection(magickImages))
        {
            QuantizeSettings settings = new QuantizeSettings();
            settings.Colors = 256;
            collection.Quantize(settings);

            collection.Optimize();
            collection.Write(stream, MagickFormat.Gif);
        }
    }

我测试过,图像从位图到 MagickImages 的转换不需要很长时间,最多 5 秒。我的图像大约是 4000x3000。 所有图像具有相同的大小。写入流也不需要很长时间。有什么方法可以改善时间?

【问题讨论】:

  • 如果您能提供minimal reproducible example,我们可以将其复制到控制台应用程序中并重现您所看到的内容,那就太好了。
  • 那里有多少张图片。时间花在哪里?在循环中?
  • ImageMagick 使用一种特殊的量化算法来处理 gif,这有点慢,因为您必须将颜色从数百万减少到 256。指定您自己的颜色映射并使用 -remap 转换为 256 可能会更快.见imagemagick.org/Usage/quantize/#remap
  • 大约 70 张图片,运行我给你的这段代码大约需要 45 秒。对于 20 张图像,大约需要 20 秒。对于我想要使用的东西来说,这仍然太多了。
  • 我发布了整个方法,只需使用位图、流、循环和 fps 列表调用它即可。

标签: c# .net imagemagick imagemagick.net


【解决方案1】:

如果我正确理解您的问题,那么缓慢在于显示 GIF,而不是生成它。如果是这种情况,请在调用 Add 方法之前尝试调整图像大小。

例如:

image.Resize(400,300);

【讨论】:

  • 我不希望我的 gif 改变它的大小。我的问题可能在我开始使用 MagickImageCollection 之间的某个地方。这段代码大约需要 40 秒才能加载
  • 因此 24 位 BMP 图像可能会为每个图像使用大约 36M 的内存。这可能是瓶颈。如果您不想调整大小,可以先尝试将它们转换为 JPEG 图像,这样使用的内存要少得多 - 至少可以作为缩小问题范围的实验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2020-07-08
相关资源
最近更新 更多