我正在尝试将QImage中的图像类型作为QString,这是我使用的代码:
QImageReader reader(filename);
QByteArray filetype_ba = reader.format();
QString filetype_qs(filetype_ba);
它有效。但是当我重命名文件时,例如从image.png重命名为image.jpg,它返回空值。这是否意味着QImageReader从文件名读取而不是文件头?我想从头部获取图像类型,所以即使我重命名文件(不是转换),它仍然会给我正确的类型。
答案 0 :(得分:0)
QImageReader documentation specify the following steps:
- 首先根据可选格式字符串或文件名后缀
查询图像插件- 如果没有插件支持图像格式,则根据可选格式字符串或文件名检查Qt的内置处理程序 的后缀。强>
- 如果找不到有能力的插件或内置处理程序,则会通过检查数据流的内容来测试每个插件。
- 如果没有插件可以根据数据内容检测到图像格式, 通过检查内容来测试每个内置图像处理程序。
- 最后,如果以上所有方法都失败,QImageReader将报告 尝试阅读图像时失败。
醇>
似乎处理程序与文件扩展名匹配,并说"嘿,我完全可以读到"没有检查内容,正如您所假设的那样。通过(好)设计,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()));