你會留意到Insus.NET在前一次的寫了Reset Image Size的功能http://www.cnblogs.com/insus/articles/1909037.html,這個功能是在圖片顯示時去做圖片縮減,有網友向Insus.NET提及,這樣做有點不好,就是每run一次,系統就要縮減產生一次,這樣會有損效能,希望能改善一下。為了改善效能,哪只有在圖片上傳時或在圖片管理時,實現一個功能儲存一份縮圖在目錄中。
下面是代碼(部分),請參考:
View Code
System.Drawing.Image imgOriginal = System.Drawing.Image.FromFile(originalImagePath);
//擷取原圖片的的寬度與高度
int originalWidth = imgOriginal.Width;
int originalHeight = imgOriginal.Height;
//定義縮圖片寬度和高度
int thumbnailWidth, thumbnailHeight;
//如果原圖片的寬度與高度都小於縮圖片尺寸
if (originalWidth < thumbnailSize && originalHeight < thumbnailSize)
{
thumbnailWidth = originalWidth; //寬度等於原寬度
thumbnailHeight = originalHeight;//高度等於原高度
}
//如果原圖片寬度大於原圖片的高度
else if (originalWidth > originalHeight)
{
thumbnailWidth = thumbnailSize; //寬度等於縮圖片尺寸
thumbnailHeight = originalHeight * thumbnailSize / originalWidth; //高度做相應比例縮小
}
//如果原圖片高度大於原圖片的寬度
else
{
thumbnailWidth = originalWidth * thumbnailSize / originalHeight; //寬度做相應比例縮小
thumbnailHeight = thumbnailSize; //高度等於縮圖片尺寸
}
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(thumbnailWidth, thumbnailHeight);
System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);
//設定縮圖片品質
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphics.DrawImage(imgOriginal, 0, 0, thumbnailWidth, thumbnailHeight);
// 儲存縮圖片
bitmap.Save(imageSavePath);