3

我的项目是将大量 (30000) 小 jpeg 图像 (400*300) 批量调整为 15 种不同的目标大小(小于源)。

我首先创建了一个基于 CImg 和 libjpg 的多线程命令行工具来批量处理图像。并且在我的 4*2 核 Ubuntu 记事本(20 分钟)上发挥了作用。

现在客户想要该工具的 GUI,带有进度条、预计时间、预览……等等!并希望它也可以在 Windows 上运行。他想要一种形象管理器。

我开始将纯 C++ 命令行移植到 Qt 及其 QImage 类(QtConcurrent::run 用于多线程),这里的问题是:在同一台机器上,它在 Windows 7 x64 上运行慢 3 倍(大约 50 分钟)!

那么如何使用 Qt 读取图像并使用 CImg 调整图像大小呢?它会跑得更快吗?

4

2 回答 2

3

这是我所做的:

void convert(QStringList files, QString destDir) {
    foreach (QString file, files) {
      CImg<unsigned char> image(file.toStdString().c_str());
      QString destFile = destDir + QFileInfo(file).fileName();
      image.get_resize(200, 200, -100, -100, 1).save_jpeg(destFile.toStdString().c_str(), 70);
  }
}

介入:

QImage img;
foreach (QString file, files) {
img.load(file);
QString destFile = destDir + QFileInfo(file).fileName();
img.scaled(200, 200, Qt::IgnoreAspectRatio, Qt::FastTransformation).save(destFile, 0, 70);
}

它的运行速度快 2 到 3 倍

于 2011-07-16T16:19:57.420 回答
2

如果不进行测量,很难判断它是否会运行得更快(尽管我猜是这样),但这仍然是一个好主意。为您的命令行工具创建一个界面(API 不是 GUI),在 Qt 中构建 gui 部分并从中调用图像大小调整后端的 API。

无论如何,这对于应用程序开发来说是一个很好的(我什至称之为基本原则)设计。对于这样一个小项目,它有时是矫枉过正的,但既然你已经有了“后端”部分,无论如何你都很好。

于 2011-07-12T11:48:23.540 回答