如何在Qt中将tiff或pnm转换为jpeg

时间:2017-12-27 13:36:12

标签: c++ linux qt

我使用扫描仪。扫描仪输出采用tiff或pnm格式。但我无法将这些格式加载到QImage中。

QProcess process;
process.start("scanimage -d epjitsu --format=tiff");
process.waitForFinished(240000);
QByteArray ba = process.readAllStandardOutput();
QImage image;
image.fromData(ba);

image.fromData(ba)将失败,因为Qt不知道tiff格式。唯一的方法,如何转换它,是将bytearray存储到文件并使用linux实用程序转换来转换它。但我不想这样做。我想在Qt中以某种方式做到这一点。

3 个答案:

答案 0 :(得分:0)

您可以使用GDAL打开tiff文件,然后创建一个QImage。此QImage可以以jpg格式保存。

答案 1 :(得分:0)

Qt通过libtiff提供tiff支持。

我认为默认配置选项是它使用系统提供的任何内容。这意味着您的系统应安装libtiff。

您还可以在提供-qt-libtiff配置标志的情况下进行自定义qt构建,该标志将使用捆绑的lib将其合并到qt二进制文件中,而不是使用外部系统库。

要做的另一个考虑因素是tiff支持不在" Qt Essentials"模块,但部分是" Qt Add-Ons"面对Qt Image Formats模块。

最后,您仍然可以选择扫描到文件,然后通过外部工具将文件转换为支持的格式。

答案 2 :(得分:0)

qt知道tiff格式。以下代码适用于我:

QFile f("Untitled.tiff");
if (!f.open(QIODevice::ReadOnly)) {
    return;
}
QByteArray ar(f.size(), ' ');
f.read(ar.data(), ar.size());
QImage img;

img.loadFromData(ar);
if (!img.isNull())
{
    QPixmap image = QPixmap::fromImage(img);
    ui.tiffLabel->setFixedSize(img.size());
    ui.tiffLabel->setPixmap(image);
}

确保您满足所有dll依赖项(我认为qtiff.dll)

确保您的QByteArray ba包含图片

并且,有可能使用loadFromData

fromData内容