2011年10月25日 星期二

asp.net_圖片縮放_另存縮圖_Image Resize

有一類很普遍的應用:

我們可以藉由各種方式取得使用者上傳的的照片到File Server,而另一面則藉由網際網路以不同的介面來觀看這些上傳的圖片。而在這樣單純的應用裡,一值都有一個讓人關心的問題「使用者可以更快看到圖片嗎?」

然而,我們都瞭解想要更快的看到圖片,必須:
1. 有更大的頻寬
2. 有更小的圖片

頻寬通常不是我們所可以決定的,所以"更小且適當"的圖片將是我們希望的。

所以,我們要在一個恰當的時機,把圖片縮小:
1. 上傳圖片前─於使用者端先將圖片縮小後再上傳。
2. 上傳圖片時─使用者上傳原始大小,再於伺服器端另存出縮圖。
3. 下載圖片時─於使用者下載圖片時,另存縮圖讓使用者下載。
4. 下載圖片後─於圖片下載到使用者端後,再進行縮圖動作。

這樣非一般性的處理,通常要在'一次性'的操作來執行是比較恰當的,所以我們應該在上傳前或上傳時進行,但這牽扯到File Server是否要儲存原始圖片,若是答案是必須的,那麼我們只有一個最恰當的時間做縮圖這件事情→於上傳圖片到伺服器後,將其另存一份縮圖檔;至於縮圖需要縮到什麼程度,就必須要視看圖端的需求。


protected void ChangeImageSize(string FileName, string FilePath , int SmallWidth)
{
System.Drawing.Image img = System.Drawing.Image.FromFile(FilePath + FileName);
ImageFormat ThisFormat = img.RawFormat;
int FixWidth = SmallWidth;
int FixHeight = FixWidth * img.Height / img.Width;

Bitmap ImgOutput = new Bitmap(img, FixWidth, FixHeight);
ImgOutput.Save(FilePath + "small_" + FileName, ThisFormat);

img.Dispose();
ImgOutput.Dispose();
}

若以行動裝置目前的照相機,一張相片大約為1.5mb,在另存為640*480的圖片後約為47kb,對於顯示縮圖能夠達到很好的效果,也可以讓使用者介面操作起來更為順暢。

沒有留言:

張貼留言