ImageMagick 将 jpg 图像转换为 gif 速度慢

ImageMagick convert jpg images to gif slow

我正在使用 Magick++(IM 7.0.3 platform:CentOS Linux 7.0 版) 将图像转换为 gif。我从文件创建图像对象,问题是当我将 9 个 png 文件(每个 50kb)转换为 gif 时,它只需要 50 毫秒。但是当它变成 9 个 jpg 文件(每个 20kb)时,它需要 1900ms。背后的原因是什么?如何使用 jpg 文件使其更快?

 for(int i = 2; i < argc-1; i++)
  {
    // I pass the file path from command line
    cout << argv[i] << endl;
    Image img(argv[i]);
    img.animationDelay(delay);
    img.magick("GIF");
    frames.push_back(img);
  }
  long mergestart = getCurrentTime();
  Magick::Blob tmpBlob;
  Magick::writeImages(frames.begin(), frames.end(), &tmpBlob);

我猜测 PNG 文件要么是调色板要么包含相对较少的颜色,而 JPEG 文件将有数千种颜色,因此 ImageMagick 将被迫做更多的事情努力减少和优化 GIF 可以包含的相对较小的 256 色调色板的颜色。

通过运行检查我对你的文件的理论:

identify -verbose Any.PNG

identify -verbose Any.JPG

并查看 Number of colours

或者,您可以使用此命令来计算颜色:

identify -format %k AnyImage.png

如果因为要处理数以千计的文件而想让它更快,可以使用多线程,或类似 GNU Parallel 的方法来同时完成更多工作。