ImageMagick将jpg图像转换为gif slow

Roy*_*ang 2 png jpeg imagemagick 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);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

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

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

identify -verbose Any.PNG
Run Code Online (Sandbox Code Playgroud)

identify -verbose Any.JPG
Run Code Online (Sandbox Code Playgroud)

并看看Number of colours.

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

identify -format %k AnyImage.png
Run Code Online (Sandbox Code Playgroud)

如果你想让它更快,因为你需要处理数千个文件,你可以使用多线程,或者像GNU Parallel这样的东西来一次完成更多工作.