随笔-7  评论-24  文章-102  trackbacks-0

内容引用自:
菜鸟问题,高分求解:关于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流。 
posted on 2010-05-04 15:41 黄小二 阅读(808) 评论(0)  编辑  收藏 所属分类: ASP.NET

只有注册用户登录后才能发表评论。


网站导航: