生成縮略圖是一個十分常用功能,找到了一個方法,重寫部分代碼,實用又好用,.net又一個生成縮略圖的方法,不變形
縮略圖 寬ks 高gs
原圖 寬ky 高gy
ky/gy > ks/gs 也就是ky*gs>gy*ks
如果原圖 寬比高 大於 小圖 寬比高
則取原圖的高 然後原圖寬則取高剩以小圖的寬,再除以小圖的高
ky/gy < ks/gs 也就是ky*gs<gy*ks
如果原圖 寬比高 小於 小圖 寬比高
則取原圖的寬 然後高則取原圖寬剩以小圖的高,再除以小圖的寬
實現代碼如下,代碼是從開源項目HoverTreeCMS中獲取的,更多信息請參考:
http://hovertree.com/menu/hovertreecms/
/// <summary>
/// 為圖片生成縮略圖 by 何問起
/// </summary>
/// <param name="phyPath">原圖片的路徑</param>
/// <param name="width">縮略圖寬</param>
/// <param name="height">縮略圖高</param>
/// <returns></returns>
public System.Drawing.Image GetHvtThumbnail(System.Drawing.Image image, int width, int height)
{
//代碼是從開源項目HoverTreeCMS中獲取的
//更多信息請參考:http://hovertree.com/menu/hovertreecms/
Bitmap m_hovertreeBmp = new Bitmap(width, height);
//從Bitmap創建一個System.Drawing.Graphics
Graphics m_HvtGr = Graphics.FromImage(m_hovertreeBmp);
//設置
m_HvtGr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//下面這個也設成高質量
m_HvtGr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
//下面這個設成High
m_HvtGr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
//把原始圖像繪制成上面所設置寬高的縮小圖
Rectangle rectDestination = new Rectangle(0, 0, width, height);
int m_width, m_height;
if (image.Width * height > image.Height * width)
{
m_height = image.Height;
m_width = (image.Height * width) / height;
}
else
{
m_width = image.Width;
m_height = (image.Width * height) / width;
}
m_HvtGr.DrawImage(image, rectDestination, 0, 0, m_width, m_height, GraphicsUnit.Pixel);
return m_hovertreeBmp;
}
需要引用命名空間:System.Drawing