本文将介绍如何将图片转换为二进制数据,并探讨其在数据库或文件系统中的存储方式。通过具体步骤和示例代码帮助读者理解整个过程。
存储与读取图片的常见方法如下:
1. 存储图片:以二进制形式保存数据库中的字段应设置为Image数据类型(如SQL Server),并使用Byte[]进行实际的数据存储。
- 参数是图片路径,返回值为Byte[]类型的函数:
```csharp
public byte[] GetPictureData(string imagepath)
{
FileStream fs = new FileStream(imagepath, FileMode.Open);
byte[] byData = new byte[fs.Length];
fs.Read(byData, 0, byData.Length);
fs.Close();
return byData;
}
```
- 参数是Image对象,返回值为Byte[]类型的函数:
```csharp
public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
{
MemoryStream mstream = new MemoryStream();
imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] byData = new Byte[mstream.Length];
mstream.Position = 0;
mstream.Read(byData, 0, byData.Length);
mstream.Close();
return byData;
}
```
通过上述方式,可以将图片转换为Byte[]对象,并将其保存至数据库中。
2. 读取图片:相应字段需要被转化为Byte[]类型:
- 参数是Byte[]类型,返回值是Image类型的函数:
```csharp
public System.Drawing.Image ReturnPhoto(byte[] streamByte)
{
MemoryStream ms = new MemoryStream(streamByte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return img;
}
```
- 参数同样是Byte[]类型但没有返回值,适用于ASP.NET中将图片输出到网页上:
```csharp
public void WritePhoto(byte[] streamByte)
{
Response.ContentType = image/GIF;
Response.BinaryWrite(streamByte);
}
```
此外,在处理Response.ContentType时可以针对不同的文档类型使用相应的格式。例如,根据数据读取的“document_type”值来设置响应的内容类型:
```csharp
switch (dataread(document_type))
{
case doc:
Response.ContentType = application/msword;
break;
case swf:
Response.ContentType = application/x-shockwave-flash;
break;
case xls:
Response.ContentType = application/vnd.ms-excel;
break;
case gif:
Response.ContentType = image/gif;
break;
case Jpg:
Response.ContentType = image/jpeg;
}
```