• 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

  • 相关阅读:
    iaf——接口自动化测试框架
    性能优化系列
    MVC架构简介及其测试策略
    10种常见的软件架构模式
    软件开发框架分析和架构模式
    安全测试基础&安全测试---AppScan扫描工具
    WEB安全测试要点总结
    大数据Hadoop Hive HBase Spark Storm
    第三方授权方式1
    java-weixin-tools接入微信
  • 原文地址:https://www.cnblogs.com/ribavnu/p/4808810.html
Copyright © 2020-2023  润新知