asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
生活随笔
收集整理的這篇文章主要介紹了
asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在網站開發時,生成縮略圖是一個非常常見和實用的功能.以前在asp里只能借助com組件實現,現在在.net里可以利用框架的強大的類庫輕松實現.下面帖出完整的代碼(帶詳細注釋),參考了網上的一些文章及.net?sdk相關內容.QQROOM網絡家園的圖片上傳用到了所有的4種生成方式.
????????/**////?<summary>
????????///?生成縮略圖
????????///?</summary>
????????///?<param?name="originalImagePath">源圖路徑(物理路徑)</param>
????????///?<param?name="thumbnailPath">縮略圖路徑(物理路徑)</param>
????????///?<param?name="width">縮略圖寬度</param>
????????///?<param?name="height">縮略圖高度</param>
????????///?<param?name="mode">生成縮略圖的方式</param>????
????????public?static?void?MakeThumbnail(string?originalImagePath,?string?thumbnailPath,?int?width,?int?height,?string?mode)
????????{
????????????Image?originalImage?=?Image.FromFile(originalImagePath);
????????????
????????????int?towidth?=?width;
????????????int?toheight?=?height;
????????
????????????int?x?=?0;
????????????int?y?=?0;
????????????int?ow?=?originalImage.Width;
????????????int?oh?=?originalImage.Height;????????
????????????switch?(mode)
????????????{????????
????????????????case?"HW"://指定高寬縮放(可能變形)????????????????
????????????????????break;
????????????????case?"W"://指定寬,高按比例????????????????????
????????????????????toheight?=?originalImage.Height?*?width/originalImage.Width;
????????????????????break;
????????????????case?"H"://指定高,寬按比例
????????????????????towidth?=?originalImage.Width?*?height/originalImage.Height;????????????????????
????????????????????break;????????
????????????????case?"Cut"://指定高寬裁減(不變形)????????????????
????????????????????if((double)originalImage.Width/(double)originalImage.Height?>?(double)towidth/(double)toheight)
????????????????????{
????????????????????????oh?=?originalImage.Height;
????????????????????????ow?=?originalImage.Height*towidth/toheight;
????????????????????????y?=?0;
????????????????????????x?=?(originalImage.Width?-?ow)/2;
????????????????????}
????????????????????else
????????????????????{
????????????????????????ow?=?originalImage.Width;
????????????????????????oh?=?originalImage.Width*height/towidth;
????????????????????????x?=?0;
????????????????????????y?=?(originalImage.Height?-?oh)/2;
????????????????????}
????????????????????break;????????????????????
????????????????default?:
????????????????????break;
????????????}????
????????????
????????????//新建一個bmp圖片
????????????Image?bitmap?=?new?System.Drawing.Bitmap(towidth,toheight);
????????????//新建一個畫板
????????????Graphics?g?=?System.Drawing.Graphics.FromImage(bitmap);
????????????//設置高質量插值法
????????????g.InterpolationMode?=?System.Drawing.Drawing2D.InterpolationMode.High;
????????????//設置高質量,低速度呈現平滑程度
????????????g.SmoothingMode?=?System.Drawing.Drawing2D.SmoothingMode.HighQuality;
????????????//清空畫布并以透明背景色填充
????????????g.Clear(Color.Transparent);????????
????????????//在指定位置并且按指定大小繪制原圖片的指定部分
????????????g.DrawImage(originalImage,?new?Rectangle(0,?0,?towidth,?toheight),?
????????????????new?Rectangle(x,?y,?ow,oh),
????????????????GraphicsUnit.Pixel);
????????????try
????????????{????????????
????????????????//以jpg格式保存縮略圖
????????????????bitmap.Save(thumbnailPath,?System.Drawing.Imaging.ImageFormat.Jpeg);
????????????}
????????????catch(System.Exception?e)
????????????{
????????????????throw?e;
????????????}
????????????finally
????????????{
????????????????originalImage.Dispose();
????????????????bitmap.Dispose();????????????????????????
????????????????g.Dispose();
????????????}
????????}
關鍵方法Graphics.DrawImage見ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemdrawinggraphicsclassdrawimagetopic11.htm
????????/**////?<summary>
????????///?生成縮略圖
????????///?</summary>
????????///?<param?name="originalImagePath">源圖路徑(物理路徑)</param>
????????///?<param?name="thumbnailPath">縮略圖路徑(物理路徑)</param>
????????///?<param?name="width">縮略圖寬度</param>
????????///?<param?name="height">縮略圖高度</param>
????????///?<param?name="mode">生成縮略圖的方式</param>????
????????public?static?void?MakeThumbnail(string?originalImagePath,?string?thumbnailPath,?int?width,?int?height,?string?mode)
????????{
????????????Image?originalImage?=?Image.FromFile(originalImagePath);
????????????
????????????int?towidth?=?width;
????????????int?toheight?=?height;
????????
????????????int?x?=?0;
????????????int?y?=?0;
????????????int?ow?=?originalImage.Width;
????????????int?oh?=?originalImage.Height;????????
????????????switch?(mode)
????????????{????????
????????????????case?"HW"://指定高寬縮放(可能變形)????????????????
????????????????????break;
????????????????case?"W"://指定寬,高按比例????????????????????
????????????????????toheight?=?originalImage.Height?*?width/originalImage.Width;
????????????????????break;
????????????????case?"H"://指定高,寬按比例
????????????????????towidth?=?originalImage.Width?*?height/originalImage.Height;????????????????????
????????????????????break;????????
????????????????case?"Cut"://指定高寬裁減(不變形)????????????????
????????????????????if((double)originalImage.Width/(double)originalImage.Height?>?(double)towidth/(double)toheight)
????????????????????{
????????????????????????oh?=?originalImage.Height;
????????????????????????ow?=?originalImage.Height*towidth/toheight;
????????????????????????y?=?0;
????????????????????????x?=?(originalImage.Width?-?ow)/2;
????????????????????}
????????????????????else
????????????????????{
????????????????????????ow?=?originalImage.Width;
????????????????????????oh?=?originalImage.Width*height/towidth;
????????????????????????x?=?0;
????????????????????????y?=?(originalImage.Height?-?oh)/2;
????????????????????}
????????????????????break;????????????????????
????????????????default?:
????????????????????break;
????????????}????
????????????
????????????//新建一個bmp圖片
????????????Image?bitmap?=?new?System.Drawing.Bitmap(towidth,toheight);
????????????//新建一個畫板
????????????Graphics?g?=?System.Drawing.Graphics.FromImage(bitmap);
????????????//設置高質量插值法
????????????g.InterpolationMode?=?System.Drawing.Drawing2D.InterpolationMode.High;
????????????//設置高質量,低速度呈現平滑程度
????????????g.SmoothingMode?=?System.Drawing.Drawing2D.SmoothingMode.HighQuality;
????????????//清空畫布并以透明背景色填充
????????????g.Clear(Color.Transparent);????????
????????????//在指定位置并且按指定大小繪制原圖片的指定部分
????????????g.DrawImage(originalImage,?new?Rectangle(0,?0,?towidth,?toheight),?
????????????????new?Rectangle(x,?y,?ow,oh),
????????????????GraphicsUnit.Pixel);
????????????try
????????????{????????????
????????????????//以jpg格式保存縮略圖
????????????????bitmap.Save(thumbnailPath,?System.Drawing.Imaging.ImageFormat.Jpeg);
????????????}
????????????catch(System.Exception?e)
????????????{
????????????????throw?e;
????????????}
????????????finally
????????????{
????????????????originalImage.Dispose();
????????????????bitmap.Dispose();????????????????????????
????????????????g.Dispose();
????????????}
????????}
關鍵方法Graphics.DrawImage見ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemdrawinggraphicsclassdrawimagetopic11.htm
總結
以上是生活随笔為你收集整理的asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猛然发现,已经第100篇随笔了
- 下一篇: c# char unsigned_dll