QT以二进制保存图片到MySQL数据库

1、保存图片到数据库(连接数据库部分没有展示)

 

 需要创建数据库中的图片类型为:二进制mediumblob类型,(

TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G

在估算最大实际使用上限的情况下,能用小的就用小的,效率高。

//保存图片槽函数
void mysqlopt::slotInsertOCRimg(QImage image, QDateTime dateTime)
{
    qDebug() << "MYSQLthread线程slotInsertOCRimg----id:" << QThread::currentThread();
    mutex.lock();
    querySQL = QSqlQuery("", mysqlOCRdb);
    QByteArray ba;
    QBuffer imgBuffer(&ba);
    imgBuffer.open(QIODevice::WriteOnly);
    image.save(&imgBuffer, "jpg", 100);
    querySQL.prepare("insert into photo (p_type, p_binarydata, p_date) values (?, ? ,?)");
    querySQL.addBindValue("jpg");
    QVariant var(ba);
    querySQL.addBindValue(var);
    querySQL.addBindValue(dateTime.toString("yyyy-MM-dd hh-mm-ss.zzz"));
    querySQL.exec();
    if (!querySQL.isActive())
    {
        qDebug() << "OCR图片插入数据库失败:isactive状态没有激活";
        return;
    }
    ba.clear();
    imgBuffer.close();
    
    mutex.unlock();
    querySQL.finish();
}

QImage转化为 QByteArray:

1)、方式:

    QImage image;
    QByteArray imageArray;
    QBuffer buffer;
    buffer.open(QIODevice::WriteOnly);
    image.save(&buffer,"PNG");
    imageArray.append(buffer.data());

2)、方式:

    QImage image;
    QByteArray ba;
    QBuffer buffer(&ba);
    buffer.open(QIODevice::WriteOnly);
    image.save(&buffer, "PNG"); // writes image into ba in PNG format

2、读取数据库中的图片

见:https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite

 

QByteArray转化为 QImage:

    QImage image;
    QByteArray ba;
    image.loadFromData(ba);

参考链接:https://wiki.qt.io/How_to_Store_and_Retrieve_Image_on_SQLite

posted @ 2021-02-25 18:39  威海云博客  阅读(1923)  评论(1编辑  收藏  举报