566 lines
26 KiB
C#
566 lines
26 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Text;
|
||
using System.IO;
|
||
using System.Drawing;
|
||
using System.Drawing.Drawing2D;
|
||
using System.Drawing.Imaging;
|
||
using System.Reflection;
|
||
using System.Web;
|
||
|
||
namespace Mtxfw.Utility
|
||
{
|
||
public class ImageManager
|
||
{
|
||
#region 正方型裁剪并缩放
|
||
/// <summary>
|
||
/// 正方型裁剪
|
||
/// 以图片中心为轴心,截取正方型,然后等比缩放
|
||
/// 用于头像处理
|
||
/// </summary>
|
||
/// <param name="originalImagePath">原图HttpPostedFile对象</param>
|
||
/// <param name="destinationImagePath">缩略图存放地址</param>
|
||
/// <param name="side">指定的边长(正方型)</param>
|
||
/// <param name="quality">质量(范围0-100)</param>
|
||
public static void CutForSquare(string originalImagePath, string destinationImagePath, int side, int quality)
|
||
{
|
||
//创建目录
|
||
string dir = Path.GetDirectoryName(destinationImagePath);
|
||
if (!Directory.Exists(dir))
|
||
Directory.CreateDirectory(dir);
|
||
|
||
//原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)
|
||
System.Drawing.Image initImage = System.Drawing.Image.FromFile(originalImagePath);
|
||
|
||
//原图宽高均小于模版,不作处理,直接保存
|
||
if (initImage.Width <= side && initImage.Height <= side)
|
||
{
|
||
initImage.Save(destinationImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
}
|
||
else
|
||
{
|
||
//原始图片的宽、高
|
||
int initWidth = initImage.Width;
|
||
int initHeight = initImage.Height;
|
||
|
||
//非正方型先裁剪为正方型
|
||
if (initWidth != initHeight)
|
||
{
|
||
//截图对象
|
||
System.Drawing.Image pickedImage = null;
|
||
System.Drawing.Graphics pickedG = null;
|
||
|
||
//宽大于高的横图
|
||
if (initWidth > initHeight)
|
||
{
|
||
//对象实例化
|
||
pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);
|
||
pickedG = System.Drawing.Graphics.FromImage(pickedImage);
|
||
//设置质量
|
||
pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
//定位
|
||
Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);
|
||
Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);
|
||
//画图
|
||
pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
|
||
//重置宽
|
||
initWidth = initHeight;
|
||
}
|
||
//高大于宽的竖图
|
||
else
|
||
{
|
||
//对象实例化
|
||
pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);
|
||
pickedG = System.Drawing.Graphics.FromImage(pickedImage);
|
||
//设置质量
|
||
pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
//定位
|
||
Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);
|
||
Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);
|
||
//画图
|
||
pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
|
||
//重置高
|
||
initHeight = initWidth;
|
||
}
|
||
|
||
//将截图对象赋给原图
|
||
initImage = (System.Drawing.Image)pickedImage.Clone();
|
||
//释放截图资源
|
||
pickedG.Dispose();
|
||
pickedImage.Dispose();
|
||
}
|
||
|
||
//缩略图对象
|
||
System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);
|
||
System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);
|
||
//设置质量
|
||
resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
//用指定背景色清空画布
|
||
resultG.Clear(Color.White);
|
||
//绘制缩略图
|
||
resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);
|
||
|
||
//关键质量控制
|
||
//获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff
|
||
|
||
ImageCodecInfo ici = GetEncoderInfo("image/jpeg");
|
||
|
||
EncoderParameters ep = new EncoderParameters(1);
|
||
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);
|
||
|
||
//保存缩略图
|
||
resultImage.Save(destinationImagePath, ici, ep);
|
||
|
||
//释放关键质量控制所用资源
|
||
ep.Dispose();
|
||
|
||
//释放缩略图资源
|
||
resultG.Dispose();
|
||
resultImage.Dispose();
|
||
|
||
//释放原始图片资源
|
||
initImage.Dispose();
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 固定模版裁剪并缩放
|
||
/// <summary>
|
||
/// 指定长宽裁剪
|
||
/// 按模版比例最大范围的裁剪图片并缩放至模版尺寸
|
||
/// </summary>
|
||
/// <param name="postedFile">原图HttpPostedFile对象</param>
|
||
/// <param name="destinationImagePath">保存路径</param>
|
||
/// <param name="maxWidth">最大宽(单位:px)</param>
|
||
/// <param name="maxHeight">最大高(单位:px)</param>
|
||
/// <param name="quality">质量(范围0-100)</param>
|
||
public static void CutForCustom(string originalImagePath, string destinationImagePath, int maxWidth, int maxHeight, int quality)
|
||
{
|
||
//从文件获取原始图片,并使用流中嵌入的颜色管理信息
|
||
System.Drawing.Image initImage = System.Drawing.Image.FromFile(originalImagePath);
|
||
|
||
//原图宽高均小于模版,不作处理,直接保存
|
||
if (initImage.Width <= maxWidth && initImage.Height <= maxHeight)
|
||
{
|
||
initImage.Save(destinationImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
}
|
||
else
|
||
{
|
||
//模版的宽高比例
|
||
double templateRate = (double)maxWidth / maxHeight;
|
||
//原图片的宽高比例
|
||
double initRate = (double)initImage.Width / initImage.Height;
|
||
|
||
//原图与模版比例相等,直接缩放
|
||
if (templateRate == initRate)
|
||
{
|
||
//按模版大小生成最终图片
|
||
System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);
|
||
System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);
|
||
templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
templateG.Clear(Color.White);
|
||
templateG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, maxWidth, maxHeight), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);
|
||
templateImage.Save(destinationImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
}
|
||
//原图与模版比例不等,裁剪后缩放
|
||
else
|
||
{
|
||
//裁剪对象
|
||
System.Drawing.Image pickedImage = null;
|
||
System.Drawing.Graphics pickedG = null;
|
||
|
||
//定位
|
||
Rectangle fromR = new Rectangle(0, 0, 0, 0);//原图裁剪定位
|
||
Rectangle toR = new Rectangle(0, 0, 0, 0);//目标定位
|
||
|
||
//宽为标准进行裁剪
|
||
if (templateRate > initRate)
|
||
{
|
||
//裁剪对象实例化
|
||
pickedImage = new System.Drawing.Bitmap(initImage.Width, (int)Math.Floor(initImage.Width / templateRate));
|
||
pickedG = System.Drawing.Graphics.FromImage(pickedImage);
|
||
|
||
//裁剪源定位
|
||
fromR.X = 0;
|
||
fromR.Y = (int)Math.Floor((initImage.Height - initImage.Width / templateRate) / 2);
|
||
fromR.Width = initImage.Width;
|
||
fromR.Height = (int)Math.Floor(initImage.Width / templateRate);
|
||
|
||
//裁剪目标定位
|
||
toR.X = 0;
|
||
toR.Y = 0;
|
||
toR.Width = initImage.Width;
|
||
toR.Height = (int)Math.Floor(initImage.Width / templateRate);
|
||
}
|
||
//高为标准进行裁剪
|
||
else
|
||
{
|
||
pickedImage = new System.Drawing.Bitmap((int)Math.Floor(initImage.Height * templateRate), initImage.Height);
|
||
pickedG = System.Drawing.Graphics.FromImage(pickedImage);
|
||
|
||
fromR.X = (int)Math.Floor((initImage.Width - initImage.Height * templateRate) / 2);
|
||
fromR.Y = 0;
|
||
fromR.Width = (int)Math.Floor(initImage.Height * templateRate);
|
||
fromR.Height = initImage.Height;
|
||
|
||
toR.X = 0;
|
||
toR.Y = 0;
|
||
toR.Width = (int)Math.Floor(initImage.Height * templateRate);
|
||
toR.Height = initImage.Height;
|
||
}
|
||
|
||
//设置质量
|
||
pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
|
||
//裁剪
|
||
pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
|
||
|
||
//按模版大小生成最终图片
|
||
System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);
|
||
System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);
|
||
templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
templateG.Clear(Color.White);
|
||
templateG.DrawImage(pickedImage, new System.Drawing.Rectangle(0, 0, maxWidth, maxHeight), new System.Drawing.Rectangle(0, 0, pickedImage.Width, pickedImage.Height), System.Drawing.GraphicsUnit.Pixel);
|
||
|
||
//关键质量控制
|
||
//获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff
|
||
ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();
|
||
ImageCodecInfo ici = null;
|
||
foreach (ImageCodecInfo i in icis)
|
||
{
|
||
|
||
if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")
|
||
{
|
||
|
||
ici = i;
|
||
|
||
}
|
||
|
||
}
|
||
EncoderParameters ep = new EncoderParameters(1);
|
||
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);
|
||
|
||
//保存缩略图
|
||
templateImage.Save(destinationImagePath, ici, ep);
|
||
//templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
|
||
//释放资源
|
||
templateG.Dispose();
|
||
templateImage.Dispose();
|
||
|
||
pickedG.Dispose();
|
||
pickedImage.Dispose();
|
||
}
|
||
}
|
||
|
||
//释放资源
|
||
initImage.Dispose();
|
||
}
|
||
#endregion
|
||
|
||
#region 等比缩放
|
||
/// <summary>
|
||
/// 图片等比缩放
|
||
/// </summary>
|
||
/// <param name="postedFile">原图HttpPostedFile对象</param>
|
||
/// <param name="destinationImagePath">缩略图存放地址</param>
|
||
/// <param name="targetWidth">指定的最大宽度(0 不做缩放)</param>
|
||
/// <param name="targetHeight">指定的最大高度(0 不做缩放)</param>
|
||
/// <param name="watermarkText">水印文字(为""表示不使用水印)</param>
|
||
/// <param name="watermarkImage">水印图片路径(为""表示不使用水印)</param>
|
||
public static void MakeWatermarkImage(string originalImagePath, string destinationImagePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)
|
||
{
|
||
//创建目录
|
||
string dir = Path.GetDirectoryName(destinationImagePath);
|
||
if (!Directory.Exists(dir))
|
||
Directory.CreateDirectory(dir);
|
||
|
||
//原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)
|
||
System.Drawing.Image initImage = System.Drawing.Image.FromFile(originalImagePath);
|
||
|
||
//原图宽高均小于模版,不作处理,直接保存
|
||
if ((initImage.Width <= targetWidth && initImage.Height <= targetHeight) || (targetWidth == 0 || targetHeight == 0))
|
||
{
|
||
//文字水印
|
||
if (watermarkText != "")
|
||
{
|
||
using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(initImage))
|
||
{
|
||
System.Drawing.Font fontWater = new Font("黑体", 10);
|
||
System.Drawing.Brush brushWater = new SolidBrush(Color.White);
|
||
gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);
|
||
gWater.Dispose();
|
||
}
|
||
}
|
||
|
||
//透明图片水印
|
||
if (watermarkImage != "")
|
||
{
|
||
if (File.Exists(watermarkImage))
|
||
{
|
||
//获取水印图片
|
||
using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))
|
||
{
|
||
//水印绘制条件:原始图片宽高均大于或等于水印图片
|
||
if (initImage.Width >= wrImage.Width && initImage.Height >= wrImage.Height)
|
||
{
|
||
Graphics gWater = Graphics.FromImage(initImage);
|
||
|
||
//透明属性
|
||
ImageAttributes imgAttributes = new ImageAttributes();
|
||
ColorMap colorMap = new ColorMap();
|
||
colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
|
||
colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
|
||
ColorMap[] remapTable = { colorMap };
|
||
imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
|
||
|
||
float[][] colorMatrixElements = {
|
||
new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
|
||
new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
|
||
new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
|
||
new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f},//透明度:0.5
|
||
new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}
|
||
};
|
||
|
||
ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);
|
||
imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
|
||
gWater.DrawImage(wrImage, new Rectangle(initImage.Width - wrImage.Width, initImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes);
|
||
|
||
gWater.Dispose();
|
||
}
|
||
wrImage.Dispose();
|
||
}
|
||
}
|
||
}
|
||
|
||
//保存
|
||
initImage.Save(destinationImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
}
|
||
else
|
||
{
|
||
//缩略图宽、高计算
|
||
double newWidth = initImage.Width;
|
||
double newHeight = initImage.Height;
|
||
|
||
//宽大于高或宽等于高(横图或正方)
|
||
if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)
|
||
{
|
||
//如果宽大于模版
|
||
if (initImage.Width > targetWidth)
|
||
{
|
||
//宽按模版,高按比例缩放
|
||
newWidth = targetWidth;
|
||
newHeight = initImage.Height * (targetWidth / initImage.Width);
|
||
}
|
||
}
|
||
//高大于宽(竖图)
|
||
else
|
||
{
|
||
//如果高大于模版
|
||
if (initImage.Height > targetHeight)
|
||
{
|
||
//高按模版,宽按比例缩放
|
||
newHeight = targetHeight;
|
||
newWidth = initImage.Width * (targetHeight / initImage.Height);
|
||
}
|
||
}
|
||
|
||
//生成新图
|
||
//新建一个bmp图片
|
||
System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);
|
||
//新建一个画板
|
||
System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);
|
||
|
||
//设置质量
|
||
newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||
newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||
|
||
//置背景色
|
||
newG.Clear(Color.White);
|
||
//画图
|
||
newG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, newImage.Width, newImage.Height), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);
|
||
|
||
//文字水印
|
||
if (watermarkText != "")
|
||
{
|
||
using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(newImage))
|
||
{
|
||
System.Drawing.Font fontWater = new Font("宋体", 10);
|
||
System.Drawing.Brush brushWater = new SolidBrush(Color.White);
|
||
gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);
|
||
gWater.Dispose();
|
||
}
|
||
}
|
||
|
||
//透明图片水印
|
||
if (watermarkImage != "")
|
||
{
|
||
if (File.Exists(watermarkImage))
|
||
{
|
||
//获取水印图片
|
||
using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))
|
||
{
|
||
//水印绘制条件:原始图片宽高均大于或等于水印图片
|
||
if (newImage.Width >= wrImage.Width && newImage.Height >= wrImage.Height)
|
||
{
|
||
Graphics gWater = Graphics.FromImage(newImage);
|
||
|
||
//透明属性
|
||
ImageAttributes imgAttributes = new ImageAttributes();
|
||
ColorMap colorMap = new ColorMap();
|
||
colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
|
||
colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
|
||
ColorMap[] remapTable = { colorMap };
|
||
imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
|
||
|
||
float[][] colorMatrixElements = {
|
||
new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
|
||
new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
|
||
new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
|
||
new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f},//透明度:0.5
|
||
new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}
|
||
};
|
||
|
||
ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);
|
||
imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
|
||
gWater.DrawImage(wrImage, new Rectangle(newImage.Width - wrImage.Width, newImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes);
|
||
gWater.Dispose();
|
||
}
|
||
wrImage.Dispose();
|
||
}
|
||
}
|
||
}
|
||
|
||
//保存缩略图
|
||
newImage.Save(destinationImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
|
||
//释放资源
|
||
newG.Dispose();
|
||
newImage.Dispose();
|
||
initImage.Dispose();
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 其它
|
||
/// <summary>
|
||
/// 判断文件类型是否为WEB格式图片
|
||
/// (注:JPG,GIF,BMP,PNG)
|
||
/// </summary>
|
||
/// <param name="contentType">HttpPostedFile.ContentType</param>
|
||
/// <returns></returns>
|
||
public static bool IsWebImage(string contentType)
|
||
{
|
||
if (contentType == "image/pjpeg" || contentType == "image/jpeg" || contentType == "image/gif" || contentType == "image/bmp" || contentType == "image/png")
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private static ImageCodecInfo GetEncoderInfo(String mimeType)
|
||
{
|
||
int j;
|
||
ImageCodecInfo[] encoders;
|
||
encoders = ImageCodecInfo.GetImageEncoders();
|
||
for (j = 0; j < encoders.Length; ++j)
|
||
{
|
||
if (encoders[j].MimeType == mimeType)
|
||
return encoders[j];
|
||
}
|
||
return null;
|
||
}
|
||
|
||
|
||
|
||
#endregion
|
||
|
||
#region 生成缩略图
|
||
/// <summary>
|
||
/// 生成缩略图
|
||
/// </summary>
|
||
/// <param name="originalImagePath">源图路径(物理路径)</param>
|
||
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
|
||
/// <param name="width">缩略图宽度</param>
|
||
/// <param name="height">缩略图高度</param>
|
||
/// <param name="mode">生成缩略图的方式 hw|w|h|cut </param>
|
||
|
||
public static void CutImage(string originalImagePath, string thumbnailPath, int width, int height, string mode)
|
||
{
|
||
Image image = Image.FromFile(originalImagePath);
|
||
|
||
int cutWidth = width;
|
||
int curHeight = height;
|
||
int x = 0;
|
||
int y = 0;
|
||
int oriWidth = image.Width;
|
||
int oriHeight = image.Height;
|
||
string cutMode = mode;
|
||
if (cutMode != null)
|
||
{
|
||
cutMode = cutMode.ToLower();
|
||
if (cutMode != "hw")
|
||
{
|
||
if (cutMode == "w")
|
||
{
|
||
curHeight = (image.Height * width) / image.Width;
|
||
}
|
||
else if (cutMode == "h")
|
||
{
|
||
cutWidth = (image.Width * height) / image.Height;
|
||
}
|
||
else if (cutMode == "cut")
|
||
{
|
||
if ((((double)image.Width) / ((double)image.Height)) > (((double)cutWidth) / ((double)curHeight)))
|
||
{
|
||
oriHeight = image.Height;
|
||
oriWidth = (image.Height * cutWidth) / curHeight;
|
||
y = 0;
|
||
x = (image.Width - oriWidth) / 2;
|
||
}
|
||
else
|
||
{
|
||
oriWidth = image.Width;
|
||
oriHeight = (image.Width * height) / cutWidth;
|
||
x = 0;
|
||
y = (image.Height - oriHeight) / 2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
Image image2 = new Bitmap(cutWidth, curHeight);
|
||
Graphics graphics = Graphics.FromImage(image2);
|
||
graphics.Clear(Color.Transparent);
|
||
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
||
|
||
graphics.DrawImage(image, new Rectangle(0, 0, cutWidth, curHeight), new Rectangle(x, y, oriWidth, oriHeight), GraphicsUnit.Pixel);
|
||
try
|
||
{
|
||
image2.Save(thumbnailPath, ImageFormat.Jpeg);
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
throw exception;
|
||
}
|
||
finally
|
||
{
|
||
image.Dispose();
|
||
image2.Dispose();
|
||
graphics.Dispose();
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
}
|