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