圖片在上傳時要根據圖片大小來生成對應的各種大小的小圖,比如傳760PX的圖片,則分別要多生成300,100寬
度的圖片。於是查看了GDI的功能,~~ 平時用得不多,生疏啊。。
實現方法有2個方式:
1。使用Image的GetThumbnailImage 方法直接生成壓縮圖片,大概大概如此:
//設置 原圖片 對象的 EncoderParameters 對象,設置清晰度
ImageCodecInfo ici = GetCodecInfo((string)htmimes[mFileExtName]);
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(Encoder.Quality,lngDefinition);
System.Drawing.Image.GetThumbnailImageAbort myCallback =new
System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
System.Drawing.Image myThumbnail = image.GetThumbnailImage(intNewWidth, intNewHeight,
myCallback, IntPtr.Zero);
myThumbnail.Save(txtNewPath, ici, parameters);
2。使用Graphics 重新繪製圖象
ImageCodecInfo ici = GetCodecInfo((string)htmimes[mFileExtName]);
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(Encoder.Quality,lngDefinition);
Bitmap objNewBitMap = new Bitmap(intNewWidth, intNewHeight,
PixelFormat.Format32bppArgb);
//從指定的 Image 對象創建新 Graphics 對象
Graphics objGraphics = Graphics.FromImage(objNewBitMap);
//清除整個繪圖面並以透明背景色填充
objGraphics.Clear(Color.Transparent);
//在指定位置並且按指定大小繪製 原圖片 對象
objGraphics.DrawImage(image, new Rectangle(0, 0, intNewWidth,
intNewHeight));
objNewBitMap.Save(txtNewPath + txtNewFileName+"."+mFileExtName, ici,
parameters);
注意lngDefinition是調整清晰度的LONG型參數,
!d4T!fa的bm無^國-件提x網E的4wY#網e一般50-90 就很清晰了。因爲在使用的時候先是用第一種方法,結果發現把清晰度調得再高都很模糊,後來用第2種方法,發現清晰度爲
40的時候也很清晰。
小結下吧:
1。2種效果,在清晰度上是Graphics 勝出
2。在生成同樣寬度,同樣清晰度前提下,圖片Graphics繪製的也比較小,小1/3左右。