• 3843阅读
  • 3回复

[提问]Not a JPEG file: starts with 0x89 0x50 [复制链接]

上一主题 下一主题
离线binxuan7
 

只看楼主 倒序阅读 楼主  发表于: 2018-03-06
在用qml的image加载图片时有的正确显示了,但有的出现这个错误

Not a JPEG file: starts with 0x89 0x50
qrc:/main.qml:136:25: QML Image: Error decoding: file:///D:/pictured/picture/1.jpg: Unable to read image data


我查了一下貌似是PNG的文件,后缀被错误的改成了JPG,图片量很多,手动修改错误的图片格式部现实,请问各位大大有什么办法吗?
离线linker

只看该作者 1楼 发表于: 2018-03-07
写个程序,用图片类读取文件夹里所有文件,如果load失败则修改后缀。应该可以吧
做土豆长大的孩纸
离线binxuan7

只看该作者 2楼 发表于: 2018-03-08
回 linker 的帖子
linker:写个程序,用图片类读取文件夹里所有文件,如果load失败则修改后缀。应该可以吧 (2018-03-07 16:15) 

我也想过,可就是怕出现,多种情况,jpg文件后缀错写成了PNG,PNG错误的写成了JPG,JPG错误的写成GIF等等,QT貌似缺乏判断实际格式的功能
离线binxuan7

只看该作者 3楼 发表于: 2018-03-11
已经成功解决问题,我写了个判断格式的函数,如有相同问题的可以看一下
QString PicModel::returnRealFormat(QString path,QString suffix){//suffix代表路劲
    QFile file(path);
    file.open(QIODevice::ReadOnly);
    QByteArray ba;
    ba=file.readAll();
    file.close();
    char c;
    QString s;
    for(int i=0;i<2;i++)
    {
        c=ba.at(i);
        s.append(c);
    }
    qDebug()<<s[0]<<s[1];
    qDebug()<<s;
    if(s=="GI")
    {
        qDebug()<<"格式:GIF";
        return "gif";
    }
    if(s=="\uffff\uffd8")
    {
        qDebug()<<"格式:JPG";
        return "jpg";
    }
    if(s=="\uff89P")
    {
        QFileInfo finfo(path);
        if(suffix!="png")/
        {
            qDebug()<<"格式修改成功";
             file.rename(finfo.baseName()+"png");//调用rename函数修改文件后缀
        }
        qDebug()<<"格式:PNG";
        return "png";
    }
    if(s=="BM")
    {
        qDebug()<<"格式:BMP";
        return "bmp";
    }
    if(s=="MM")
    {
        qDebug()<<"格式:TIFF";
        return "tiff";
    }
    if(s=="P6")
    {
        qDebug()<<"格式:PPM";
        return "ppm";
    }
    if(s=="P5")
    {
        qDebug()<<"格式:PGM";
        return "pgm";
    }
    if(s=="p4"){
        qDebug()<<"格式:PBM";
        return "pbm";
    }
    return "other";
}
快速回复
限100 字节
 
上一个 下一个