从qimage获取图像类型

时间:2015-06-08 13:14:38

标签: qt qimage

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

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

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

2 个答案:

答案 0 :(得分:0)

QImageReader documentation specify the following steps

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

似乎处理程序与文件扩展名匹配,并说"嘿,我完全可以读到"没有检查内容,正如您所假设的那样。通过(好)设计,jpeg处理程序应该只处理jpeg而不是其他任何东西。

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

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

答案 1 :(得分:0)

QMimeDatabase :: MatchContent

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

QMimeType type = QMimeDatabase().mimeTypeForFile(fileName, QMimeDatabase::MatchContent);
QImage image("fileName", const_cast<char *>(type.preferredSuffix().toStdString().c_str()));