Posted on 2011-04-18 09:59
Shuffy 閱讀(4200)
評論(0) 編輯 收藏 引用 所屬分類:
Web開發(fā)技術(shù)
在網(wǎng)站開發(fā)中,經(jīng)常會使用一些文本編輯控件,如CuteEditor。這些控件一般都能同時輸入文本和圖片,并進(jìn)行圖文混排。如何讀取該文本框中的圖片路徑,并生成縮略圖,是很多開發(fā)者頭疼的事情。本文根據(jù)網(wǎng)絡(luò)資料進(jìn)行整理,現(xiàn)將完整代碼呈現(xiàn)如下:
1、獲取圖片地址:
/// <summary>
/// 通過正則表達(dá)式獲取圖片地址。
/// </summary>
/// <param name="RegExpress">正則表達(dá)式</param>
/// <param name="InputString">源字符串</param>
/// <returns></returns>
//RegExpress為要匹配的正則表達(dá)式,InputString為源字符串。
public string GetImageUrl(string RegExpress, string InputString)
{
//RegExpress為正則表達(dá)式,例如,獲取圖片URL的正則表達(dá)式為: regstring ="(?<=src=\").+?\\.(gif|jpg|bmp|png)(?=\")"
Regex re = new Regex(RegExpress, RegexOptions.IgnoreCase|RegexOptions.Compiled);
Match ma = re.Match(InputString);
if (ma.Success)
{
return ma.Value.Substring(1);
}
else
{
return "";
}
}
2、生成縮略圖
/// <summary>
/// 生成縮略圖
/// </summary>
/// <param name="originalImagePath">源圖路徑(物理路徑)</param>
/// <param name="thumbnailPath">縮略圖路徑(物理路徑)</param>
/// <param name="width">縮略圖寬度</param>
/// <param name="height">縮略圖高度</param>
/// <param name="mode">生成縮略圖的方式</param>
public 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);
//設(shè)置高質(zhì)量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//設(shè)置高質(zhì)量,低速度呈現(xiàn)平滑程度
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();
}
}
3、獲取縮略圖相對路徑
/// <summary>
/// 獲取縮略圖路徑.
/// </summary>
/// <param name="InputString">帶有圖像標(biāo)簽的文本</param>
/// <returns>縮略圖全路徑</returns>
public string GetTitleImageUrl(string InputString)
{
string RegString = "(?<=src=\").+?\\.(gif|jpg|bmp)(?=\")";
string ImageUrl = GetImageUrl(RegString, InputString);
string ImageDirectory = System.IO.Path.GetDirectoryName(ImageUrl);
string ImageFileName = System.IO.Path.GetFileName(ImageUrl);
string ReturnImageUrl = ImageDirectory + "/t" + ImageFileName;//返回的縮略圖的相對路徑
string InputImageUrl = System.Web.HttpContext.Current.Server.MapPath("~/"+ImageUrl);//源圖物理路徑
string OutputImageUrl = System.Web.HttpContext.Current.Server.MapPath("~/"+ImageDirectory+"/t"+ImageFileName);//縮略圖物理路徑
int width = 160;//縮略圖寬
int height = 190;//縮略圖高
string mode = "H";//縮放模式
MakeThumbnail(InputImageUrl, OutputImageUrl, width, height, mode);
return ReturnImageUrl;
}
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/z365days/archive/2007/04/26/1585726.aspx