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