ImageMagick将jpg图像转换为gif slow

时间:2017-05-10 05:10:22

标签: imagemagick png jpeg gif

我正在使用Magick ++(IM 7.0.3平台:CentOS Linux 7.0版)将图像转换为gif。我从文件创建Image对象,问题是当我将9个png文件(每个50kb)转换为gif时,它只需要50ms。但当它转向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);

1 个答案:

答案 0 :(得分:5)

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

运行以下命令检查我的文件理论:

identify -verbose Any.PNG

identify -verbose Any.JPG

并查看Number of colours

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

identify -format %k AnyImage.png

如果您想要加快速度,因为您需要处理数千个文件,您可以使用多线程或类似 GNU Parallel 的方式来完成更多工作。