大数据库存储图片教程
- 格式:doc
- 大小:40.00 KB
- 文档页数:7
如何使用MySQL进行图像存储与处理随着信息技术的快速发展,图像处理与存储成为了计算机领域的一个重要课题。
MySQL作为一个开源的关系型数据库管理系统,不仅具备高可扩展性和可靠性,还提供了强大的数据处理和存储功能。
本文将探讨如何使用MySQL进行图像存储与处理,并介绍一些相关的技术和工具。
一、MySQL中存储图像的方法在MySQL中存储图像的方法有很多种,根据实际需求选择最合适的方法可以提高效率和可维护性。
1. 使用BLOB类型存储图像数据BLOB(Binary Large Object)是MySQL中一种特殊的数据类型,用于存储大型二进制数据。
可以将图像以二进制的形式存储在数据库中,并使用BLOB类型将其存储起来。
BLOB类型可以存储任意大小的二进制数据,适用于图像、音频、视频等多媒体数据的存储。
创建一个BLOB类型的列,并将图像数据以二进制形式插入到数据库中。
2. 使用BASE64编码存储图像数据在MySQL中,还可以使用BASE64编码将图像数据进行存储。
BASE64是一种将二进制数据编码为ASCII字符的方法。
可以将图像数据转换为BASE64编码的字符串,并将其存储在数据库中。
在需要使用图像数据时,再将BASE64编码的字符串解码为二进制数据。
使用BASE64编码存储图像数据可以提高数据的可读性和可传输性,但会增加数据的存储空间。
二、MySQL中图像的处理与操作除了存储图像数据,MySQL还提供了一些函数和技术,可以对存储在数据库中的图像数据进行处理和操作。
1. 使用MySQL提供的图像处理函数MySQL提供了一些内置的图像处理函数,用于对存储在数据库中的图像数据进行处理。
例如,可以使用函数CONVERT将图像数据从一种格式转换为另一种格式。
可以使用函数RESIZE调整图像的尺寸。
还可以使用函数ROTATE对图像进行旋转。
使用MySQL提供的图像处理函数可以方便地对图像数据进行处理,而不需要将数据导出到外部工具进行处理。
如何存储图片到SQL SERVER数据库中SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。
下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。
在这篇文章中我们要看到如何在SQL Server中存储和读取图片。
1、建立一个表:在SQL SERVER中建立这样结构的一个表:列名类型目的ID Integer 主键IDIMGTITLE Varchar(50) 图片的标题IMGTYPE Varchar(50) 图片类型. 要以辨认的类型IMGDATA Image 用于存储二进制数据2、存储图片到SQL SERVER数据库中为了能存储到表中,你首先要上传它们到你的WEB 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。
将你的 encType 属性设置为:myltipart/formdata.Stream imgdatastream = File1.PostedFile.InputStream;int imgdatalen = File1.PostedFile.ContentLength;string imgtype = File1.PostedFile.ContentType;string imgtitle = TextBox1.Text;byte[] imgdata = new byte[imgdatalen];int n = imgdatastream.Read(imgdata,0,imgdatalen);stringconnstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"];SqlConnection connection = new SqlConnection(connstr);SqlCommand command = new SqlCommand("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)VALUES ( @imgtitle, @imgtype,@imgdata )", connection );SqlParameter paramTitle = new SqlParameter("@imgtitle", SqlDbType.VarChar,50 );paramTitle.Value = imgtitle;command.Parameters.Add( paramTitle);SqlParameter paramData = new SqlParameter( "@imgdata", SqlDbType.Image );paramData.Value = imgdata;command.Parameters.Add( paramData );SqlParameter paramType = new SqlParameter( "@imgtype", SqlDbType.VarChar,50 ); paramType.Value = imgtype;command.Parameters.Add( paramType );connection.Open();int numRowsAffected = command.ExecuteNonQuery();connection.Close();3、从数据库中恢复读取现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。
如何在MySQL中处理图像和音视频存储MySQL是一款常用的关系型数据库管理系统,广泛应用于各种应用程序中。
在实际开发过程中,我们常常会遇到图像和音视频存储的问题,本文将介绍如何在MySQL中处理图像和音视频存储,并探讨一些优化方案和注意事项。
一、图像存储图像在现代应用程序中扮演着重要的角色,如社交媒体、电子商务等。
在MySQL中,我们可以使用BLOB(Binary Large Object)类型来存储图像数据。
BLOB是一种用于存储二进制大对象的数据类型,可以存储任意二进制数据。
1. 存储图像数据在MySQL中,创建一个BLOB字段用于存储图像数据,例如:CREATE TABLE images (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),image BLOB);通过以上的创建表语句,我们创建了一个名为images的表,其中包含id、name和image三个字段。
image字段用于存储图像数据。
2. 插入图像数据在插入图像数据时,我们将图像数据读取为二进制流,并将其插入到图像字段中,例如:INSERT INTO images (name, image)VALUES ('image1', LOAD_FILE('/path/to/image1.jpg'));以上语句将名为image1.jpg的图像插入到images表的image字段中。
通过LOAD_FILE函数,我们可以从文件系统中加载图像数据,并将其插入到BLOB字段中。
3. 读取图像数据在读取图像数据时,我们可以使用SELECT语句将图像数据读取为二进制流,并通过程序进行处理,例如:SELECT imageFROM imagesWHERE id = 1;通过以上SELECT语句,我们可以获取id为1的图像数据。
在程序中,我们可以将该图像数据写入到临时文件中,或进行其他的图像处理操作。
C# MySQL 图片的存储与读取一、存储图片private void button3_Click(object sender, EventArgs e){if (pictureBox2.Image != null){//将图片对象image转换成缓冲流imageStreamMemoryStream imageStream = new MemoryStream();pictureBox2.Image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg);//获得图片的字节数组imageBytebyte[] imageByte = imageStream.GetBuffer();//建立数据库连接MySqlConnection conn = new MySqlConnection("Server=localhost;Uid=root;Password=123;Database=test"); conn.Open();//设置命令参数string insertStr="insert into img(image) values(?imageByte)";MySqlCommand comm = new MySqlCommand();comm.Connection = conn;mandText = insertStr;mandType = CommandType.Text;//设置数据库字段类型MediumBlob的值为图片字节数组imageBytecomm.Parameters.Add(new MySqlParameter("?imageByte", MySqlDbType.MediumBlob)).Value = imageByte;//执行命令try{comm.ExecuteNonQuery();}catch (Exception ex){MessageBox.Show(ex.ToString());}comm.Dispose();conn.Close();conn.Dispose();}}二、读取图片private void button4_Click(object sender, EventArgs e){//建立数据库连接MySqlConnection conn = new MySqlConnection("Server=localhost;Uid=root;Password=123;Database=test"); conn.Open();//设置命令参数MySqlCommand comm = new MySqlCommand("select image from img order by id desc", conn);//执行命令并获得数据读取器MySqlDataReader dr = comm.ExecuteReader();if (dr.Read()){//读出图片字节数组至byte[]byte[] imageByte = new byte[dr.GetBytes(0, 0, null, 0, int.MaxValue)];dr.GetBytes(0, 0, imageByte, 0, imageByte.Length);//将图片字节数组加载入缓冲流MemoryStream imageStream = new MemoryStream(imageByte);//从缓冲流生成图片Image image = Image.FromStream(imageStream, true);pictureBox2.Image = image;}dr.Dispose();comm.Dispose();conn.Close();conn.Dispose();}。
一、写一个存储过程,将图片存入数据库中基本情况介绍:数据库版本:oracle 11g数据库用户:scott数据库密码:tigerJDK:1.6要导入的图片:D:\picture\1.jpg--创建存储图片的表CREATE TABLE IMAGE_LOB (T_ID V ARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);--创建存储图片的目录CREATE OR REPLACE DIRECTORY IMAGES AS 'D:\picture';存储过程如下:CREATE OR REPLACE PROCEDURE IMG_INSERT (TID V ARCHAR2,FILENAME V ARCHAR2) ASF_LOB BFILE;--文件类型B_LOB BLOB;BEGINiNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)V ALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;--插入空的blobF_LOB:= BFILENAME ('IMAGES', FILENAME);--获取指定目录下的文件DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONL Y);--以只读的方式打开文件DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB));--传递对象DBMS_LOB.FILECLOSE (F_LOB);--关闭原始文件COMMIT;END;--将该图片存入表call IMG_INSERT('1','1.gif'); 验证一下是否已存入:二、从数据库读取图片并显示在页面上项目名称为ShowPhoto启动Tomcat,在浏览器输入:http://localhost:8080/ShowPhoto/,显示如下:。
在我们设计和制作网站的过程中,有时把图片保存到数据库中要比存成文件的形式更加方便。
PHP和MySQL这对黄金组合可以很容易的实现上述功能。
在本文中,我们将会向读者介绍如何把图片保存到MySQL数据库中以及如何将数据库中的图片显示出来。
设置数据库我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。
MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。
MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。
BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。
在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。
CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );编写上传脚本关于如何实现文件的上传,我们在这里就不再介绍了。
现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。
具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。
<? If($Picture != "none") { $PSize = filesize($Picture); $mysqlPicture = addslashes(fread (fopen($Picture, "r"), $PSize)); mysql_connect($host,$username,$password) or die("Unable to connect to SQL server"); @mysql_select_db($db) or die("Unable to select database"); mysql_query("INSERT INTO Images (Image) VALUES '($mysqlPicture')") or die("Can't Perform Query"); } else { echo"You did not upload any picture"; } ?>这样,我们就可以成功的把图片保存到数据库中。
使用MySQL进行图像存储和检索近年来,随着互联网的快速发展,图像处理和存储技术成为了研究和应用的热点之一。
在众多的数据库管理系统中,MySQL以其灵活性、高性能和可靠性而受到广泛关注。
本文将探讨如何使用MySQL进行图像存储和检索。
一、介绍图像存储和检索是指将图像文件存储到数据库,并通过各种方式对图像进行搜索和查询的过程。
在传统的图像存储方式中,我们常常将图像文件存储在文件系统中,然后利用文件路径进行检索。
然而,这种方式存在一些问题,比如不便于图像的组织和管理,不方便进行多条件的查询等。
而使用MySQL进行图像存储和检索,可以更好地解决这些问题。
二、图像存储在MySQL中存储图像可以使用BLOB(Binary Large Object)类型。
BLOB类型可以存储二进制数据,包括图像、音频、视频等。
在创建数据表时,可以为图像字段指定BLOB类型。
例如,创建一个名为image_table的数据表,其中包含一个image字段:CREATE TABLE image_table (id INT NOT NULL AUTO_INCREMENT,image BLOB,PRIMARY KEY (id));然后,可以使用INSERT语句将图像文件存储在image字段中。
例如,假设有一个名为image.jpg的图像文件,可以执行以下SQL语句将其存储在image_table 表中:INSERT INTO image_table (image) VALUES (LOAD_FILE('path/to/image.jpg'));需要注意的是,LOAD_FILE函数需要指定图像文件的完整路径。
同时,需要确保MySQL的配置文件中开启了该函数的权限。
三、图像检索在MySQL中进行图像检索可以借助于图像特征提取和相似度计算的技术。
常用的图像特征包括颜色直方图、纹理特征、形状特征等。
可以使用图像处理库,如OpenCV等,对图像进行特征提取,并将提取到的特征存储在MySQL数据库中。
实用标准文案C#从SQL 数据库中读取和存入图片本实例主要介绍如何将图片存入数据库。
将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类、BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中。
主要代码如下:private void button1_Click(object sender, EventArgs e)openFileDialog1.Filter = *jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP;if(openFileDialog1.ShowDialog()==DialogResult.OK){string fullpath =openFileDialog1.FileName;//文件路径FileStream fs = new FileStream(fullpath, FileMode.Open);byte[] imagebytes =new byte[fs.Length];BinaryReader br = new BinaryReader(fs);imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//打开数据精彩文档.实用标准文案SqlConnection con = newSqlConnection(server=(local);uid=sa;pwd=;database=db_05);con.Open();SqlCommand com = new SqlCommand(insert into tb_08values(@ImageList),con);com.Parameters.Add(ImageList, SqlDbType.Image);com.Parameters[ImageList].Value = imagebytes;com.ExecuteNonQuery();con.Close();}}本实例主要介绍如何从数据库中把图片读出来。
将图⽚储存在MySQL数据库中的⼏种⽅法通常对⽤户上传的图⽚需要保存到数据库中。
解决⽅法⼀般有两种:1、将图⽚保存的路径存储到数据库;2、将图⽚以⼆进制数据流的形式直接写⼊数据库字段中。
以下为具体⽅法:⼀、保存图⽚的上传路径到数据库: string uppath="";//⽤于保存图⽚上传路径 //获取上传图⽚的⽂件名 string fileFullname = this.FileUpload1.FileName; //获取图⽚上传的时间,以时间作为图⽚的名字可以防⽌图⽚重名 string dataName = DateTime.Now.ToString("yyyyMMddhhmmss"); //获取图⽚的⽂件名(不含扩展名) string fileName = fileFullname.Substring(stIndexOf("\\") + 1); //获取图⽚扩展名 string type = fileFullname.Substring(stIndexOf(".") + 1); //判断是否为要求的格式 if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF") { //将图⽚上传到指定路径的⽂件夹 this.FileUpload1.SaveAs(Server.MapPath("~/upload") + "\\" + dataName + "." + type); //将路径保存到变量,将该变量的值保存到数据库相应字段即可 uppath = "~/upload/" + dataName + "." + type; }⼆、将图⽚以⼆进制数据流直接保存到数据库:引⽤如下命名空间:using System.Drawing; using System.IO; using System.Data.SqlClient; 设计数据库时,表中相应的字段类型为iamge 保存: //图⽚路径 string strPath = this.FileUpload1.PostedFile.FileName.ToString (); //读取图⽚ FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] photo = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); //存⼊ SqlConnection myConn = new SqlConnection("Data Source=.;Initial Catalog=stumanage;User ID=sa;Password=123"); string strComm = " INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )";//操作数据库语句根据需要修改 SqlCommand myComm = new SqlCommand(strComm, myConn); myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length); myComm.Parameters["@photoBinary"].Value = photo; myConn.Open(); if (myComm.ExecuteNonQuery() > 0) { bel1.Text = "ok"; } myConn.Close(); 读取: ...连接数据库字符串省略 mycon.Open(); SqlCommand command = new SqlCommand("select stuimage from stuInfo where stuid=107", mycon);//查询语句根据需要修改 byte[] image = (byte[])command.ExecuteScalar (); //指定从数据库读取出来的图⽚的保存路径及名字 string strPath = "~/Upload/zhangsan.JPG"; string strPhotoPath = Server.MapPath(strPath); //按上⾯的路径与名字保存图⽚⽂件 BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate)); bw.Write(image); bw.Close(); //显⽰图⽚ this.Image1.ImageUrl = strPath; //采⽤这两种⽅式可以根据实际需求灵活选择。
数据库存储图片(MsSQL/ORACLE/ACCESS) (2009-05-24 16:34:01)转载标签:分类:C#开发it下面我来汇总一下如何将图片保存到SqlServer、Oracle、Access数据库中。
首先,我们要明白图片是以二进制的形式保存在数据库中的,那么把图片保存到数据库中的步骤大体上有这几步1.将图片转换为二进制数组(byte[]);2.把转换后的二进制数组(byte[])作为参数传递给要执行的Command;3.执行Command;首先,如何把图片转换成byte[],如果你使用的是2.0,那么你可以使用FileUpLoad控件来实现byte[] fileData = this.FileUpload1.FileBytes;如果你用的是1.1或者你在创建WinForm那么你可以使用下面的方法来把图片转换为byte[]public byte[] getBytes(string filePath){System.IO.FileStream fs = new System.IO.FileStream(filePath,System.IO.FileMode.Open);byte[] imgData = new byte[fs.Length];fs.Read(imgData, 0, (int)fs.Length);return imgData;}接下来我们要做的就是要把已经得到的byte[]作为参数传递给Command对象1.SqlServer数据库。
SqlServer有Image字段类型,最大可以存储2G的数据。
byte[] fileData = this.FileUpload1.FileBytes;string sql = "insert into t_img(img) values (@img)";string strconn =System.Configuration.ConfigurationManager.ConnectionStrings["fengd ongDB"].ToString();SqlConnection sqlConn = new SqlConnection(strconn); SqlCommand sqlComm = new SqlCommand(sql, sqlConn); sqlComm.Parameters.Add("@img", SqlDbType.Image);//添加参数sqlComm.Parameters["@img"].Value = fileData;//为参数赋值sqlConn.Open();sqlComm.ExecuteNonQuery();sqlConn.Close();2.Oracle数据库。
在Oracle数据库中我们可以使用BLOB字段类型,最大可以存储4G的数据。
byte[] fileData = this.FileUpload1.FileBytes;string sql = "insert into t_img(imgid,IMGDATA) values(100,:IMGDATA)"; string strconn =System.Configuration.ConfigurationManager.ConnectionStrings["Conne ctionStringForOracle"].ToString();OracleConnection oraConn = new OracleConnection(strconn); OracleCommand oraComm = new OracleCommand(sql, oraConn); oraComm.Parameters.Add(":IMGDATA", OracleType.Blob);//添加参数oraComm.Parameters[":IMGDATA"].Value = fileData;//为参数赋值oraConn.Open();oraComm.ExecuteNonQuery();oraConn.Close();注意:这里我需要说明一下,用Oracle的专用连接传递参数的时候你要小心一点,看看上面的SQL语句你就会知道,要在参数名前加个“:”否则就会出现下面的错误“OracleException: orA-01036: 非法的变量名/编号”。
这里需要我们注意一下。
另外还有一个地方,当我引用System.Data.OracleClient命名空间的时候默认是没有的,必须添加对System.Data.OracleClient的引用,我记得在VS2003下如果安装了OracleClient是不用添加引用就可以引入的。
这里也要留意一下。
3.Access数据库。
在Access中我们使用OLE对象字段类型,最大支持1G的数据。
byte[] fileData = this.FileUpload1.FileBytes;string sql = "insert into t_img(IMGDATA) values(?)";string strconn =System.Configuration.ConfigurationManager.ConnectionStrings["Conne ctionStringForAccess"].ToString();OleDbConnection oleConn = new OleDbConnection(strconn); OleDbCommand oleComm = new OleDbCommand(sql, oleConn); oleComm.Parameters.Add("imgdata", OleDbType.Binary); oleComm.Parameters["imgdata"].Value = fileData;oleConn.Open();oleComm.ExecuteNonQuery();oleConn.Close();好了,到这里我们就把图片保存到数据库中全部说完了,接下来要说的是如何从数据库中把图片读取出来。
实际上这是与插入操做相反的一个过程:先报把从数据库中获取的图片数据转换为数组,然后把数组转换为图片。
不同数据之间没有特别大的差异,我这里只列出从Oracle数据库中把数据读取出来以供参考。
private byte[] getImageDataFromOracle(){string sql = "select IMGDATA from t_img where imgID=100";string strconn =System.Configuration.ConfigurationManager.ConnectionStrings["Conne ctionStringForOracle"].ToString();OracleConnection oraConn = new OracleConnection(strconn); OracleCommand oraComm = new OracleCommand(sql, oraConn);oraConn.Open();byte[] fileData = (byte[])oraComm.ExecuteScalar();oraConn.Close();return fileData;}我们获取到了数据,那么把byte[]转换为图片的过程都是一样的。
private System.Drawing.Image convertByteToImg(byte[] imgData){System.IO.MemoryStream ms = newSystem.IO.MemoryStream(imgData);System.Drawing.Image img = System.Drawing.Image.FromStream(ms); return img;} 如果你在开发WinForm应用的话你可以直接把返回结果保存或者显示到PictureBox里,如果你在使用那么你可以在单独的一个页面把图片输出,在另外一个页面把Image控件的ImageUrl属性指向图片输出页面。
比如输出页面getImg.aspx的代码protected void Page_Load(object sender, EventArgs e){string sql = "select IMGDATA from t_img where imgID=100";string strconn =System.Configuration.ConfigurationManager.ConnectionStrings["Conne ctionStringForOracle"].ToString();OracleConnection oraConn = new OracleConnection(strconn); OracleCommand oraComm = new OracleCommand(sql, oraConn);oraConn.Open();byte[] fileData = (byte[])oraComm.ExecuteScalar();oraConn.Close();System.IO.MemoryStream ms = new System.IO.MemoryStream(fileData);System.Drawing.Image img = System.Drawing.Image.FromStream(ms); img.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);}注意:MsSQL和Access测试通过。
ORACLE缺乏应用平台未经过测试。
学习分享!。