图片的类型如何判断,在处理图片中,用图片的后缀是不太可靠的,根据图片获取的图片数据进行数据类型匹配
QFile file(filepath);
if (!file.open(QIODevice::ReadOnly)) {
qWarning() << "DetectImageFormat() failed to open file:" << filepath;
return "";
}
const QByteArray data = file.read(1024);
// Check bmp file.
if (data.startsWith("BM")) {
return "bmp";
}
// Check dds file.
if (data.startsWith("DDS")) {
return "dds";
}
// Check gif file.
if (data.startsWith("GIF8")) {
return "gif";
}
// Check Max OS icons file.
if (data.startsWith("icns")) {
return "icns";
}
// Check jpeg file.
if (data.startsWith("\xff\xd8")) {
return "jpg";
}
// Check mng file.
if (data.startsWith("\x8a\x4d\x4e\x47\x0d\x0a\x1a\x0a")) {
return "mng";
}
// Check net pbm file (BitMap).
if (data.startsWith("P1") || data.startsWith("P4")) {
return "pbm";
}
// Check pgm file (GrayMap).
if (data.startsWith("P2") || data.startsWith("P5")) {
return "pgm";
}
// Check ppm file (PixMap).
if (data.startsWith("P3") || data.startsWith("P6")) {
return "ppm";
}
// Check png file.
if (data.startsWith("\x89PNG\x0d\x0a\x1a\x0a")) {
return "png";
}
// Check svg file.
if (data.indexOf("<svg") > -1) {
return "svg";
}
// TODO(xushaohua): tga file is not supported yet.
// Check tiff file.
if (data.startsWith("MM\x00\x2a") || data.startsWith("II\x2a\x00")) {
// big-endian, little-endian.
return "tiff";
}
// TODO(xushaohua): Support wbmp file.
// Check webp file.
if (data.startsWith("RIFFr\x00\x00\x00WEBPVP")) {
return "webp";
}
// Check xbm file.
if (data.indexOf("#define max_width ") > -1 &&
data.indexOf("#define max_height ") > -1) {
return "xbm";
}
// Check xpm file.
if (data.startsWith("/* XPM */")) {
return "xpm";
}
return "";