您的位置:首页 > 编程语言 > ASP

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

2012-07-05 22:40 246 查看

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流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐