C#(.NET)生成高質量(清晰)縮圖
阿新 • • 發佈:2019-01-27
建立高質量(清晰)縮圖——動態調整大小
Bitmap類的GetThumbnailImage方法可以從指定的影象檔案中生成縮圖,用法非常簡單。但是並不總是這樣,有時生成的縮圖的質量很差——模糊不清!
為什麼會這樣?為什麼生成的圖片是模糊的?
像JPEG這樣格式的影象可能把縮圖存在同一個檔案中。如果我們使用System.Drawing.Bitmap的GetThumbnailImage方法會檢測檔案中是否存在縮圖,如果找到該縮圖,它就會返回你所設定的寬高的縮圖版本。如果影象的縮圖的版本比你要求的大小要小,就會發生如下問題:生成的縮圖就會變得模糊,我們知道拉伸一個影象會導致影象質量的下降。
解決方案:
解決方法十分簡單!我們利用System.Drawing.Image物件來裝載源影象,把影象縮放到你需要的比例,而又能保持高質量,接著儲存就搞定了!
下面教你,一步一步來建立高質量的縮圖:
本例中假定了兩個變數:
String src="c:/myImages/a.jpg"; //源影象檔案的絕對路徑
String dest="c:/myImages/a_th.jpg"; //生成的縮圖影象檔案的絕對路徑
int thumbWidth=132; //要生成的縮圖的寬度
下面通過ASP .NET C#來演示程式碼片段:
你應該包含這些名稱空間
using System.Drawing;
using System.Drawing.Drawing2D
System.Drawing.Image image = System.Drawing.Image.FromFile(src); //利用Image物件裝載源影象
//接著建立一個System.Drawing.Bitmap物件,並設定你希望的縮圖的寬度和高度。
int srcWidth=image.Width;
int srcHeight=image.Height;
int thumbHeight=(srcHeight/srcWidth)*thumbWidth;
Bitmap bmp = new Bitmap(thumbWidth, thumbHeight); //從Bitmap建立一個System.Drawing.Graphics物件,用來繪製高質量的縮小圖。 System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); //設定 System.Drawing.Graphics物件的SmoothingMode屬性為HighQuality gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //下面這個也設成高質量 gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //下面這個設成High gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //把原始影象繪製成上面所設定寬高的縮小圖 System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight);
gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel); //儲存影象,大功告成! bmp.Save(dest); //最後別忘了釋放資源(譯者PS:C#可以自動回收吧) bmp.Dispose();
image.Dispose();
int srcHeight=image.Height;
int thumbHeight=(srcHeight/srcWidth)*thumbWidth;
Bitmap bmp = new Bitmap(thumbWidth, thumbHeight); //從Bitmap建立一個System.Drawing.Graphics物件,用來繪製高質量的縮小圖。 System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); //設定 System.Drawing.Graphics物件的SmoothingMode屬性為HighQuality gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //下面這個也設成高質量 gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //下面這個設成High gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //把原始影象繪製成上面所設定寬高的縮小圖 System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight);
gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel); //儲存影象,大功告成! bmp.Save(dest); //最後別忘了釋放資源(譯者PS:C#可以自動回收吧) bmp.Dispose();
image.Dispose();