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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM