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