內容引用自:
菜鳥問題,高分求解:關於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流。