asp.net对于图像文件的操作--存储、读取访问

asp.net对于图像文件的操作--存储、读取访问

内容引用自:
菜鸟问题,高分求解:关于SQL Server存储图片的问题
http://topic.csdn.net/t/20050415/20/3940356.html

数据库中Image类型的数据的存取(For C#/ASP.NET)
http://www.cnblogs.com/billsfeng/archive/2008/07/31/1257579.html

SQL Server存储图像数据的策略与方法
http://www.yesky.com/20030113/1648152.shtml

How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158




1、图片存储

a.存储于数据库

         在大多数情况下,最好把图片文件与其它数据一起存在数据库中。因为将影像数据文件存储在数据库中有许多优点:

  易于管理 当BLOB与其他数据一起存储在数据库中时,BLOB和表格是数据一起备份和恢复。这样就降低了表格数据与BLOB数据不同步的机会,而且降低了其他用户无意中删除了文件系统中BLOB数据位置的路径和风险。另外,将数据存储在数据库中BLOB和其他数据的插入、更新和删除都在同一个事务中实现。这样就确保了数据的一致性和文件与数据库之间的一致性。还有一点好处是不需要为文件系统中的文件单独设置安全性。

  可伸缩性 尽管文件系统被设计为能够处理大量不同大小的对象,但是文件系统不能对大量小文件进行优化。在这种情况下,数据库系统可以进行优化。

  可用性 数据库具有比文件系统更多的可用性。数据库复制允许在分布式环境中复制、分配和潜在的修改数据。在主系统失效的情况下,日志转移提供了保留数据库备用副本的方法。

引自:SQL Server存储图像数据的策略与方法


b.存储于文件系统

当然,在某些情况下,将图片存储在文件系统中将是更好的选择:
1 )使用图片的应用程序需要数据流性能,例如实时的视频重现。
2 )象Microsoft PhotoDraw或者Adobe Photoshop这样的应用程序经常访问BLOB,这些应用程序只知道怎样访问文件。
3 )需要使用一些NTFS文件系统中的特殊功能,例如远程存储。

引自:SQL Server存储图像数据的策略与方法


    建议:减轻数据库处理负担,也可以建立专门的文件服务器存放图片和视频.




2、数据库存储及读取图片数据

1 .将Image图像文件存入到数据库中  我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.

2 .从SQL Server数据库读取Image类型的数据,并转换成bytes [] 或Image图像文件

引自:数据库中Image类型的数据的存取(For C#/ASP.NET)




3、asp.net中自定义对图片文件的访问

web.config

  
< system .web >   <!--  vs调试、iis6  -->    
    
< httpHandlers >
      
< add  path ="*.jpg"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
      
< add  path ="*.jpeg"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
      
< add  path ="*.png"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
      
< add  path ="*.bmp"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
    
</ httpHandlers >
  
</ system.web >
  
< system .webServer > <!--  iis7  -->
    
< handlers >       
      
< add  name ="jpgMark"  path ="*.jpg"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
      
< add  name ="jpegMark"  path ="*.jpeg"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
      
< add  name ="pngMark"  path ="*.png"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
      
< add  name ="bmpMark"  path ="*.bmp"  verb ="*"  type ="包名.ImageHandler, dll文件"   />
    
</ handlers >
  
</ system.webServer >


ImageHandler 图片缩放与水印效果
http://www.blogjava.net/kiant/articles/317469.html




4、其他组件

Persits AspJpeg组件图片水印\缩略图\图片合并\图片切割\实例教程
http://www.aspxhome.com/asp/component/200812/620614.htm

AspJpeg功能摘要
支持JPEG, GIF, BMP, TIFF 和 PNG 格式图片. 输出格式始终为 JPEG
源图片可以来源于磁盘、内存、或者记录集(数据库)
缩略图片可以保存到磁盘、内存、或者HTTP流
支持三种更改大小方式: nearest-neighbor, bilinear, and bicubic. 
可以在图片之上添加图片或者文字. 
支持画中画
支持复制,反转,旋转,锐化,灰度调节.
可以调节压缩比率,以得到最佳输出效果和大小. 
从Jpeg图片中抽取EXIF 和 IPTC数据.
CMYK-RGB转换
Read/write access to individual pixels of an image. (从图象中对任意象素进行读/写存取。)





5、C# 处理GIF 图片的问题?(分不够,还有)
http://topic.csdn.net/t/20060703/11/4856635.html

8 楼tzzzc(冷剑)回复于 2006-07-03 13:33:19 得分 0 
to:Knight94(愚翁)   
  Graphics   myImg   =   Graphics.FromImage(zoomImg);//创建Graphics   
  在最后一句出现问题(处理GIF   图片时候,提示无法从带有索引像素格式的图像创建   Graphics),老提示:A   Graphics   object   cannot   be   created   from   an


9 楼Knight94(愚翁)回复于 2006-07-03 13:41:34 得分 0
 不要用gif图像直接生成graphics对象,   
    
  处理流程:   
  1、gif   分解成png或者jpg文件组;   
  2、对每个png或者jpg文件进行处理;   
  3、把处理好的png或者jpg文件组,进行合成一个gif。   





6、ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法
详细出处参考:http://www.jb51.net/article/17063.htm

Response.ContentType = "image/PNG"; 
using (MemoryStream ms = new MemoryStream()) 

img.Save(ms, ChartFormat.Png); 
Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length); 


就可以输入png图片了。 
这是由于Response.OutputStream这个流的无法往回读取造成的,也就是它的CanSeek属性是false。png图像生成的时候不像jpeg,不是流式的,已经写入的就不再管了,而是需要往回不断地写入结构数据。但是response流无法往回seek,所以直接用就不行了。改成一个可以seek的MemoryStream,先生成好png图片,然后再输出到response流。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值