pyqt二进制和图片的转换

参考:http://blog.chinaunix.net/uid-28194872-id-3516936.html

MySQL数据库要想插入图片,其字段需要是BLOB类型。
BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。

BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。

MySQL的四种BLOB类型

类型 大小(单位:字节)
TinyBlob 最大 255

Blob 最大 65K

MediumBlob 最大 16M

LongBlob 最大 4G

选择图片文件:
QString strImage = QFileDialog::getOpenFileName(
this,

"Please Select image file",

g_strCurrentDir,

"Image Format (*.png *.jpg *.bmp *.gif)");

if (strImage.isNull())

{
return;

}

g_strCurrentDir = QDir(strImage).absolutePath();

ui->labelPic->setPixmap(QPixmap(strImage).scaled(ui->labelPic->size()));

//保存图片到数据库中:
QByteArray bytes;

QBuffer buffer(&bytes);

buffer.open(QIODevice::WriteOnly);

ui->labelPic->pixmap()->save(&buffer, "JPG");

QByteArray data;

QSqlQuery query;
QString path = strImage;

QFile* file=new QFile(path); //fileName为二进制数据文件名

file->open(QIODevice::ReadOnly);
data = file->readAll();

 file->close();

Variant var(data);

QString sql = "insert into images(Image) values(?)";

 query.prepare(sql);

query.addBindValue(var);

if(!query.exec())

{

qDebug()<<query.lastError().text().toLocal8Bit().data();

}

 else

{

qDebug()<<"Insert success";
}

}



//显示数据库里的图片
     QSqlQuery q("SELECT * FROM images WHERE PicNum = 108");
   while (q.next())
    {
    if (q.isNull(0) == false)
    {
    QPixmap photo;
    ui->num->setText(q.value(0).toString());
    photo.loadFromData(q.value(1).toByteArray(), "JPG");
    ui->UserPicLabel->setPixmap(photo);
     qDebug()<<"Query success";
    }
    else
    {
        qDebug()<<"Query failed";
    }
   }
//连接数据库
#ifndef CONNECTION_H
#define CONNECTION_H
#include 
#include 
#include 
#include 
#include 
#include 
static bool createConnection()
{

   QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
   db.setDatabaseName("test");
   db.setHostName("172.17.54.133");
   db.setPort(3306);
   db.setUserName("root");
   db.setPassword("213517");
   if(!db.open())
   {
       QMessageBox::critical(0,qApp->tr("Cannot connect server"),qApp->tr("Unable to establish a database connection. "),QMessageBox::Cancel);
       return false;
       qDebug()<<"Connect MySql error!";
   }

   return true;

}


#endif // CONNECTION_H

注意:图片插入数据库和显示时其格式必须是和图片本身的格式对应的,不然不能显示。
ex:  photo.loadFromData(q.value(1).toByteArray(), "JPG");
源码下载:   SQLPicTest.rar
数据库下载:test.rar

原文地址:https://www.cnblogs.com/ribavnu/p/4808810.html