参考: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.\n"),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

pyqt二进制和图片的转换的更多相关文章

  1. c#中文件与二进制流文件的转换

    将文件转换成二进制方法: /// <summary>    /// 将文件转换成二进制    /// </summary>    /// <param name=&quo ...

  2. php 图片格式转换-亲测ok

    代码如下 /** * 图片格式转换 * @param string $image_path 文件路径或url * @param string $to_ext 待转格式,支持png,gif,jpeg,w ...

  3. 【VC++技术杂谈007】使用GDI+进行图片格式转换

    本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使 ...

  4. oracle 报“无效数字”异常和“ORA-01830: 日期格式图片在转换整个输入字符串之前结束”

    1.问题1 执行下列SQL: sql = "select count(1) as totle from vhl_model_data a where a.OBTAIN_CREATE_TIME ...

  5. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

  6. js 将图片文件转换成base64

      1.情景展示 在JavaScript中,如何使用图片文件转换成base64? 2.解决方案 /** * 网络图像文件转Base64 * @param img dom对象 */ function g ...

  7. Base64图片编码原理,base64图片工具介绍,图片在线转换Base64

    Base64图片编码原理,base64图片工具介绍,图片在线转换Base64 DataURI 允许在HTML文档中嵌入小文件,可以使用 img 标签或 CSS 嵌入转换后的 Base64 编码,减少  ...

  8. js如何将选中图片文件转换成Base64字符串?

    如何将input type="file"选中的文件转换成Base64的字符串呢? 1.首先了解一下为什么要把图片文件转换成Base64的字符串 在常规的web开发过程中,大部分上传 ...

  9. bmp,jpg,png,tif,wmf,emf与eps图片格式转换

    wmf/emf是两种Microsoft Windows的图形文件格式.它是一个矢量图格式,但是也允许包含位图.本质上,一个WMF文件保存一系列可以用来重建图片的Windows GDI命令.在某种程度上 ...

随机推荐

  1. java的IO总结(一)

    Java的IO流是实现输入输出的基础,这里所说的流就是数据流,大部分的与流相关的类放在Java.io包下. 一,Java的流分类 按照不同的分类方式可以把流分成不同的类型,下面我们从不同的角度对流进行 ...

  2. hadoop详细了解5个进程的作用

    1.job的本质是什么?2.任务的本质是什么?3.文件系统的Namespace由谁来管理,Namespace的作用是什么?4.Namespace 镜像文件(Namespace image)和操作日志文 ...

  3. 《Effective Java》读书笔记五(枚举和注解)

    No30 用enum代替int常量 一:综述 int枚举模式,示范: // The int enum pattern - severely deficient! public static final ...

  4. IOS5 ARC unsafe_unretained等说明

    转自:http://blog.csdn.net/bsplover/article/details/7707964 iOS5中加入了新知识,就是ARC,其实我并不是很喜欢它,因为习惯了自己管理内存.但是 ...

  5. document对象和属性

    文档对象:整个Html都属于document,他封装了大量的功能: docum的属性: document.title //设置文档标题等价于HTML的<title>标签 document. ...

  6. GetLastError()返回值大全

    [0]-操作成功完成.[1]-功能错误.[2]-系统找不到指定的文件.[3]-系统找不到指定的路径.[4]-系统无法打开文件.[5]-拒绝访问.[6]-句柄无效.[7]-存储控制块被损坏.[8]-存储 ...

  7. web.xml 基本配置

    session timeout 配置 <session-config> <session-timeout>5</session-timeout> </sess ...

  8. uC/OS-III 概要

    本章主要对 uC/OS-III 实时操作系统做一些概要介绍,使读者对 uC/OS-III 有个整体的浅 认识,为后面的章节的详细讲解做一个铺垫. 下图是 uC/OS-III 系统从底层到上层的文件结构 ...

  9. pyqt重写键盘事件+获取信号发送对象

    # _*_ coding:utf-8 _*_ import sys from PyQt4 import QtGui,QtCore class Example(QtGui.QMainWindow): d ...

  10. java有序的hashmap

    使用LinkedHashmap可以构建一个有序的map 引用:http://wiki.jikexueyuan.com/project/java-collection/linkedhashmap.htm ...