我正在使用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);
答案 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 的方式来完成更多工作。