从qimage获取图像类型

问题描述 投票:0回答:2

我正在尝试将QImage中的图像类型作为QString,这是我使用的代码:

QImageReader reader(filename);
QByteArray filetype_ba = reader.format();
QString filetype_qs(filetype_ba);

有用。但是当我重命名文件时,例如从image.png重命名为image.jpg,它返回空值。这是否意味着QImageReader从文件名读取而不是文件头?我想从头部获取图像类型,所以即使我重命名文件(不转换),它仍然会给我正确的类型。

qt qimage
2个回答
0
投票

QImageReader documentation specify the following steps

  1. 首先根据可选格式字符串或文件名后缀查询图像插件
  2. 如果没有插件支持图像格式,则会根据可选格式字符串或文件名后缀检查Qt的内置处理程序。
  3. 如果找不到有能力的插件或内置处理程序,则通过检查数据流的内容来测试每个插件。
  4. 如果没有插件可以根据数据内容检测图像格式,则通过检查内容来测试每个内置图像处理程序。
  5. 最后,如果以上所有方法都失败,QImageReader将在尝试读取图像时报告失败。

似乎一个处理程序匹配文件扩展名,并且如你所假设的那样在不检查内容的情况下说“嘿,我完全可以读取”。通过(好)设计,jpeg处理程序应该只处理jpeg而不是其他任何东西。

事情是QImage表现不同,因为它直接查看文件数据流以猜测格式。看起来你应该仅依靠Qimage机制进行检测。

注意:这描述了默认行为,它与QImageReader::setAutoDetectImageFormat(true)相同。 false表示程序员应该使用第二个参数或其他方法自己设置图像类型。


0
投票

QMimeDatabase :: MatchContent

文件内容优先用于查找匹配而不是文件后缀。

QMimeType type = QMimeDatabase().mimeTypeForFile(fileName, QMimeDatabase::MatchContent);
QImage image("fileName", const_cast<char *>(type.preferredSuffix().toStdString().c_str()));
© www.soinside.com 2019 - 2024. All rights reserved.