內容引用自:
菜鳥問題,高分求解:關于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.tkk7.com/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
黃小二 閱讀(823)
評論(0) 編輯 收藏 所屬分類:
ASP.NET