2010年6月20日 星期日

利用C#來做到圖檔縮圖的方式

在我們利用asp.net的上傳將圖檔傳至server後總是會害怕使用者上傳了一個無敵大的圖檔,雖然可以限制單檔上傳大小,但是使用者不是每個都會使用繪圖軟體會縮圖,所以我們限制使用者不如來幫助使用者自動縮圖。
using System.Drawing.Imaging;
using System.Drawing;

System.Drawing.Image image = System.Drawing.Image.FromFile("圖檔的位子");
//必須使用絕對路徑
ImageFormat thisFormat = image.RawFormat;
//取得影像的格式
int fixWidth = 0;
int fixHeight = 0;
//第一種縮圖用
int maxPx = Convert.ToInt16(ConfigurationManager.AppSettings["maxWidth"]);
//宣告一個最大值,demo是把該值寫到web.config裡
if (image.Width > maxPx || image.Height > maxPx)
//如果圖片的寬大於最大值或高大於最大值就往下執行
{
if (image.Width >= image.Height)
//圖片的寬大於圖片的高
{
fixWidth = maxPx;
//設定修改後的圖寬
fixHeight = Convert.ToInt32((Convert.ToDouble(fixWidth) / Convert.ToDouble(image.Width)) * Convert.ToDouble(image.Height));
//設定修改後的圖高
}
else
{
fixHeight = maxPx;
//設定修改後的圖高
fixWidth = Convert.ToInt32((Convert.ToDouble(fixHeight) / Convert.ToDouble(image.Height)) * Convert.ToDouble(image.Width));
//設定修改後的圖寬
}

}
else
//圖片沒有超過設定值,不執行縮圖
{
fixHeight = image.Height;
fixWidth = image.Width;
}
Bitmap imageOutput = new Bitmap(image, fixWidth, fixHeight);

//輸出一個新圖(就是修改過的圖)
string fixSaveName = string.Concat("新圖的檔案名稱",".jpg");
//副檔名不應該這樣給,但因為此範例沒有讀取檔案的部份所以demo就直接給啦

imageOutput.Save(string.Concat(Server.MapPath("~/"),fixSaveName), thisFormat);
//將修改過的圖存於設定的位子
imageOutput.Dispose();
//釋放記憶體
image.Dispose();
//釋放掉圖檔

沒有留言:

張貼留言