如何将asp.net中的image控件中的图片转换成字节数组
发布网友
发布时间:2022-04-14 05:37
我来回答
共2个回答
热心网友
时间:2022-04-14 07:06
鉴于很多同学咨询,如何向数据库中存储并读取图片的方法.在此给出代码,供大家参考.但个人建议,尽量少向数据库中存储如此大二进制数据,会造成数据库过于膨胀,如果采用DataSet读取数据时,当数据量过大还会造成内存严重占用,尤其是在B/S程序设计中,后果会更明显,除非用户强烈要求.一般存储图片时,如无特殊要求,只需要在数据库中存储图片的相对路径即可,将真正的图片存储在指定的文件夹就OK了.当然,两种方式在不同的适用面都有自己的优缺点,下面几篇文章大家可以看看:
以下是存储并显示图片的代码
private void button1_Click(object sender, EventArgs e) //button1的Click事件
//存储图片的代码,需在界面添加按钮Button1,打开文件对话框openFileDialog1,列表框listBox1和图片控件pictureBox1,代码注释部分为SqlServer实现,非注释部分为Access实现,在Access中,数据库名为mydb.mdb,表名为photos,字段为photoid(文本类型,主键),photoimg(OLE对象类型,用于存图片)
{
openFileDialog1.Filter = "*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fullpath = openFileDialog1.FileName
FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
byte[] imagebytes = new byte[fs.Length];
BinaryReader br = new BinaryReader(fs);
imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//把所选图片文件的流中的数据读入字节数组
OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]");
conn.Open();
OleDbCommand cmd = new OleDbCommand("insert into photos values(@id,@Image)", conn);
cmd.Parameters.Add("@id", OleDbType.VarChar, 50);
cmd.Parameters.Add("@Image", OleDbType.Binary);//图片数据
cmd.Parameters["@id"].Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;
cmd.Parameters["@Image"].Value = imagebytes;//为图片数据的SQL参数赋值
cmd.ExecuteNonQuery();
conn.Close();
//SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126");
//conn.Open();
//SqlCommand cmd = new SqlCommand("insert into photos values(@id,@Image)", conn);
//cmd.Parameters.Add("@id", SqlDbType.VarChar, 50);
//cmd.Parameters.Add("@Image", SqlDbType.Image );//与ACCESS数据库唯一不同点
//cmd.Parameters["@id"].Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;
//cmd.Parameters["@Image"].Value = imagebytes;
//cmd.ExecuteNonQuery();
//conn.Close();
MessageBox.Show("图片上传成功");
bindListBox();
}
}
private void bindListBox()//将photoId字段的数据显示在listBox1中,以便查看存入库中的每一个图片
{
OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]");
OleDbCommand cmd = new OleDbCommand("select photoid from photos");
cmd.Connection = conn;
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
listBox1.DataSource = ds.Tables[0].DefaultView;//设置listBox1的数据源
listBox1.DisplayMember = "photoid";//设置listBox1即将显示数据源中的哪个字段的数据
//SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126");
//SqlCommand cmd = new SqlCommand("select photoid from photos");
//cmd.Connection = conn;
//SqlDataAdapter da = new SqlDataAdapter();
//da.SelectCommand = cmd;
//DataSet ds = new DataSet();
//da.Fill(ds);
//listBox1.DataSource = ds.Tables[0].DefaultView;
//listBox1.DisplayMember = "photoid";
}
private void Form1_Load(object sender, EventArgs e) //Form1的Load事件
{
bindListBox();//程序加载时,先将数据库中现有的数据显示在listBox1中
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)//listBox1的SelectedIndexChanged事件,当在listBox1中选择不同的photoId时,pictureBox1中显示该photoId对应的图片
{
OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]");
OleDbCommand cmd = new OleDbCommand("select photoimg from photos where photoid='" + ((DataRowView)(listBox1.SelectedValue))[0] + "'");//将listBox1中选中的photoId所对应的图片数据从数据库中取出来
cmd.Connection = conn;
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader();
dr.Read();
byte[] b = (byte[])dr[0];//将图片数据转换成字节数组
MemoryStream stmBLOBData = new MemoryStream(b);//将该字节数组转换成内存流
pictureBox1.Image = Image.FromStream(stmBLOBData);//将该内存流转换成Image对象,并显示在pictureBox1中
//SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126");
//SqlCommand cmd = new SqlCommand("select photoimg from photos where photoid='" + ((DataRowView)(listBox1.SelectedValue))[0] + "'");
//cmd.Connection = conn;
//conn.Open();
//SqlDataReader dr = cmd.ExecuteReader();
//dr.Read();
//byte[] b = (byte[])dr[0];
//MemoryStream stmBLOBData = new MemoryStream(b);
//pictureBox1.Image = Image.FromStream(stmBLOBData);
}
另外,站长团上有产品团购,便宜有保证
热心网友
时间:2022-04-14 08:24
鉴于很多同学咨询,如何向数据库中存储并读取图片的方法.在此给出代码,供大家参考.但个人建议,尽量少向数据库中存储如此大二进制数据,会造成数据库过于膨胀,如果采用DataSet读取数据时,当数据量过大还会造成内存严重占用,尤其是在B/S程序设计中,后果会更明显,除非用户强烈要求.一般存储图片时,如无特殊要求,只需要在数据库中存储图片的相对路径即可,将真正的图片存储在指定的文件夹就OK了.当然,两种方式在不同的适用面都有自己的优缺点,下面几篇文章大家可以看看:
以下是存储并显示图片的代码
private void button1_Click(object sender, EventArgs e) //button1的Click事件
//存储图片的代码,需在界面添加按钮Button1,打开文件对话框openFileDialog1,列表框listBox1和图片控件pictureBox1,代码注释部分为SqlServer实现,非注释部分为Access实现,在Access中,数据库名为mydb.mdb,表名为photos,字段为photoid(文本类型,主键),photoimg(OLE对象类型,用于存图片)
{
openFileDialog1.Filter = "*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string fullpath = openFileDialog1.FileName
FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read);
byte[] imagebytes = new byte[fs.Length];
BinaryReader br = new BinaryReader(fs);
imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//把所选图片文件的流中的数据读入字节数组
OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]");
conn.Open();
OleDbCommand cmd = new OleDbCommand("insert into photos values(@id,@Image)", conn);
cmd.Parameters.Add("@id", OleDbType.VarChar, 50);
cmd.Parameters.Add("@Image", OleDbType.Binary);//图片数据
cmd.Parameters["@id"].Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;
cmd.Parameters["@Image"].Value = imagebytes;//为图片数据的SQL参数赋值
cmd.ExecuteNonQuery();
conn.Close();
//SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126");
//conn.Open();
//SqlCommand cmd = new SqlCommand("insert into photos values(@id,@Image)", conn);
//cmd.Parameters.Add("@id", SqlDbType.VarChar, 50);
//cmd.Parameters.Add("@Image", SqlDbType.Image );//与ACCESS数据库唯一不同点
//cmd.Parameters["@id"].Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond;
//cmd.Parameters["@Image"].Value = imagebytes;
//cmd.ExecuteNonQuery();
//conn.Close();
MessageBox.Show("图片上传成功");
bindListBox();
}
}
private void bindListBox()//将photoId字段的数据显示在listBox1中,以便查看存入库中的每一个图片
{
OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]");
OleDbCommand cmd = new OleDbCommand("select photoid from photos");
cmd.Connection = conn;
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
listBox1.DataSource = ds.Tables[0].DefaultView;//设置listBox1的数据源
listBox1.DisplayMember = "photoid";//设置listBox1即将显示数据源中的哪个字段的数据
//SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126");
//SqlCommand cmd = new SqlCommand("select photoid from photos");
//cmd.Connection = conn;
//SqlDataAdapter da = new SqlDataAdapter();
//da.SelectCommand = cmd;
//DataSet ds = new DataSet();
//da.Fill(ds);
//listBox1.DataSource = ds.Tables[0].DefaultView;
//listBox1.DisplayMember = "photoid";
}
private void Form1_Load(object sender, EventArgs e) //Form1的Load事件
{
bindListBox();//程序加载时,先将数据库中现有的数据显示在listBox1中
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)//listBox1的SelectedIndexChanged事件,当在listBox1中选择不同的photoId时,pictureBox1中显示该photoId对应的图片
{
OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]");
OleDbCommand cmd = new OleDbCommand("select photoimg from photos where photoid='" + ((DataRowView)(listBox1.SelectedValue))[0] + "'");//将listBox1中选中的photoId所对应的图片数据从数据库中取出来
cmd.Connection = conn;
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader();
dr.Read();
byte[] b = (byte[])dr[0];//将图片数据转换成字节数组
MemoryStream stmBLOBData = new MemoryStream(b);//将该字节数组转换成内存流
pictureBox1.Image = Image.FromStream(stmBLOBData);//将该内存流转换成Image对象,并显示在pictureBox1中
//SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126");
//SqlCommand cmd = new SqlCommand("select photoimg from photos where photoid='" + ((DataRowView)(listBox1.SelectedValue))[0] + "'");
//cmd.Connection = conn;
//conn.Open();
//SqlDataReader dr = cmd.ExecuteReader();
//dr.Read();
//byte[] b = (byte[])dr[0];
//MemoryStream stmBLOBData = new MemoryStream(b);
//pictureBox1.Image = Image.FromStream(stmBLOBData);
}
如何将asp.net中的image控件中的图片转换成字节数组
//存储图片的代码,需在界面添加按钮Button1,打开文件对话框openFileDialog1,列表框listBox1和图片控件pictureBox1,代码注释部分为SqlServer实现,非注释部分为Access实现,在Access中,数据库名为mydb.mdb,表名为photos,字段为photoid(文本类型,主键),photoimg(OLE对象类型,用于存图片){ openFileDialog1.Filte...
如何把doc文件转换成PDF格式?
1.当然可以,首先要确定自己有一个pdf文档,而且确定目的是需要将pdf文档转换为word格式,然后我们将现有文档通过迅捷pdf转换器软件打开。2.通过选择PDF转换页面功能其中的PDF文件转WORD项目拖入文件。3.接着在迅捷pdf转换器下方按自己的需要是...
C# ASP.NET 如何上传图片进数据库 ? 我用的是VS2010。
string path = FileUpload1.FileName //记录图片所在的路径 byte[] byteImage = null; // 初始化一个字节数组储存图片 FileStream FStream = new FileStream(path , FileMode.Open, FileAccess.Read); //将图片以文件流的形式进行保存 BinaryReader BReader = new BinaryReader(FStream);byte...
如何在ASP.Net 中把图片存入数据库
我们需要一个字节型数组来存储image 内容 读取整个图片可以使用Stream对象的Read方法来实现 Read(in byte[] buffer int offset int count)方法有三个参数 【关于Read方法的详细内容可以参看 Net FrameWorkSDK】 他们是 buffer 字节数组 此方法返回时 该缓冲区包含指定的字符数组 该数组的 offset 和 (o...
asp.net中如何把字节流格式化为图片形式
image.Save(ms, ImageFormat.Jpeg); //把图片保存在内存流里面,格式为Jpeg格式 ms.Flush(); //关闭内存流 byte[] b=ms.GetBuffer(); //直接获得2进制byte数组 //b就是这个图片的字节流
asp.net 图片转成base64位流, 怎么转后在转成图片图片显示不全
asp.net图片转base64方法如下,在确保数据完整的情况下是不会有显示不全的情况出现。< Function ImagesToBase64(FileName)Dim xml Dim root Dim fs Dim FilePath Dim objStream Dim objXMLDoc Dim Base64 ''定义变量完结 '创建对像 FilePath=Server.MapPath(FileName)getFileExt = Mid(FilePath, ...
asp.net 如何读取文件夹下所有图片名称
//遍历images目录下所有png格式图片 DirectoryInfo imagesfile = new DirectoryInfo(Server.MapPath(@"~/images"));DataList1.DataSource = imagesfile.GetFiles("*.png");DataList1.DataBind();//同理把所有的图片格式的后缀放到数组里就可以遍历所有的图片了 ...
asp.net 怎么做一个带图片和文字的button
<asp:ImageButton ID="btnSubmit" runat="server" ImageUrl="http://www.baidu.com/img/baidu_sylogo1.gif";/> 效果 你可以定义宽高,和图片url。或者直接用 <asp:Button ID="btnLogin" runat="server" Text=" 登录 " CssClass="btn_5" /> 写在样式里边 .btn_b1{width:155px;height:90px;line-...
用ASP.NET创建网络相册保存美丽记忆
首先来看下 这个相册有哪些功能 在这个相册中 我们必须先把预先摄影好的照片放到一个目录下去 之后 可以供在网上使用 上一张 下一张 的链接一张张地查看 下面先介绍如何获得文件夹中的图片 我们可以使用System IO命名空间中的DirectoryInfo类来实现 将文件夹所在的路径做为参数传递到该类的构造函数中 并...
asp.net可以使用jSignature插件吗怎样使用
jSignature有个getData方法获取签名数据用的,默认数据类型为image(图片base64字符串)。其中有一个native获取的是用户绘制的数据数组,如果没做任何操作或者回退到没有任何操作,这个数组长度为0.
想深入学习C#语言,有没有达人知道C#的好的资料呢?
(提示:在控件的Paint事件过程中编写外观绘制代码)22、编写一个程序,将一幅位图显示在一个图片框中,对位图惊醒45度旋转后,将图中所有的红色替换为黑色,然后存盘。23、编写一个控制台程序,分别将字符串“hello,my friend”写入文件f1.txt,然后,将数据分别以整型、布尔型、双精度型、字符型读出并显示。24、编写一...