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
放松一下:
人生如逆旅,我亦是行人,但愿初相见,不负有心人。
加油!