记录一个图片处理类,分享给大家参考

时间:2022-05-29 17:37:45
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace Common
{
/// <summary>
/// 图片处理
/// </summary>
public class Image
{
public static bool Thumb(string srcImage, string thumbImage, int maxWidth = 200, int maxHeight = 50, int x = 0, int y = 0)
{
System.Drawing.Image originalImage
= System.Drawing.Image.FromFile(Tool.GetMapPath(srcImage));
ImageFormat originalFormat
= originalImage.RawFormat;
string ext = System.IO.Path.GetExtension(srcImage).ToLower();
int width = 0;
int height = 0;

int srcWidth = originalImage.Width; //原始图片的宽度
int srcHeight = originalImage.Height; //原始图片的高度

double scale = Math.Min((double)maxWidth / (double)srcWidth, (double)maxHeight / (double)srcHeight);
if (scale >= 1)
{
width
= srcWidth;
height
= srcHeight; //缩略图的高度
}
else
{
width
= (int)(srcWidth * scale);
height
= (int)(srcHeight * scale);
}



//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(width, height);

//新建一个画板
System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(bitmap);

//呈现质量
graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

//设置高质量,低速度呈现平滑程度
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//设置高质量查值法
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

//清空画布并以透明背景色填充
graphic.Clear(System.Drawing.Color.Transparent);

//在指定位置并且按指定大小绘制原图片的指定部分
graphic.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(x, y, srcWidth, srcHeight), System.Drawing.GraphicsUnit.Pixel);

//以下代码为保存图片时,设置压缩质量
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[1];
qy[
0] = 100;
EncoderParameter eParam
= new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[
0] = eParam;
try
{
switch (ext)
{
case ".jpeg":
case ".jpg":
ImageCodecInfo[] arrayICI
= ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo
= null;
for (int i = 0; i < arrayICI.Length; i++)
{
if (arrayICI[i].FormatDescription.Equals("JPEG"))
{
jpegICIinfo
= arrayICI[i];
break;
}
}
if (jpegICIinfo != null)
{
bitmap.Save(Tool.GetMapPath(thumbImage), jpegICIinfo, ep);
//thumNailPath是压缩后的新路径
}
else
{
bitmap.Save(Tool.GetMapPath(thumbImage), originalFormat);
}
break;
case ".png":
bitmap.Save(Tool.GetMapPath(thumbImage), System.Drawing.Imaging.ImageFormat.Png);
break;
case ".gif":
bitmap.Save(Tool.GetMapPath(thumbImage), System.Drawing.Imaging.ImageFormat.Gif);
break;
default:
bitmap.Save(Tool.GetMapPath(thumbImage), originalFormat);
break;
}
}
catch
{
return false;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
graphic.Dispose();
}
return true;
}

public static bool Crop(string srcImage, string thumbImage, int x, int y, int width, int height)
{
System.Drawing.Image originalImage
= System.Drawing.Image.FromFile(Tool.GetMapPath(srcImage));
ImageFormat originalFormat
= originalImage.RawFormat;
string ext = System.IO.Path.GetExtension(srcImage).ToLower();

int srcWidth = originalImage.Width; //原始图片的宽度
int srcHeight = originalImage.Height; //原始图片的高度


//新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(width, height);

//新建一个画板
System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(bitmap);

//呈现质量
graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

//设置高质量,低速度呈现平滑程度
graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//设置高质量查值法
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

//清空画布并以透明背景色填充
graphic.Clear(System.Drawing.Color.Transparent);

//在指定位置并且按指定大小绘制原图片的指定部分
graphic.DrawImage(originalImage, new System.Drawing.Rectangle(x, y, width, height), new System.Drawing.Rectangle(x, y, srcWidth, srcHeight), System.Drawing.GraphicsUnit.Pixel);

//以下代码为保存图片时,设置压缩质量
EncoderParameters ep = new EncoderParameters();
long[] qy = new long[1];
qy[
0] = 100;
EncoderParameter eParam
= new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[
0] = eParam;
try
{
switch (ext)
{
case ".jpeg":
case ".jpg":
ImageCodecInfo[] arrayICI
= ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegICIinfo
= null;
for (int i = 0; i < arrayICI.Length; i++)
{
if (arrayICI[i].FormatDescription.Equals("JPEG"))
{
jpegICIinfo
= arrayICI[i];
break;
}
}
if (jpegICIinfo != null)
{
bitmap.Save(Tool.GetMapPath(thumbImage), jpegICIinfo, ep);
//thumNailPath是压缩后的新路径
}
else
{
bitmap.Save(Tool.GetMapPath(thumbImage), originalFormat);
}
break;
case ".png":
bitmap.Save(Tool.GetMapPath(thumbImage), System.Drawing.Imaging.ImageFormat.Png);
break;
case ".gif":
bitmap.Save(Tool.GetMapPath(thumbImage), System.Drawing.Imaging.ImageFormat.Gif);
break;
default:
bitmap.Save(Tool.GetMapPath(thumbImage), originalFormat);
break;
}
}
catch
{
return false;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
graphic.Dispose();
}
return true;
}


#region 正方型裁剪并缩放
/// <summary>
/// 正方型裁剪
/// 以图片中心为轴心,截取正方型,然后等比缩放
/// 用于头像处理
/// </summary>
/// <remarks>吴剑 2012-08-08</remarks>
/// <param name="fromFile">原图Stream对象</param>
/// <param name="fileSaveUrl">缩略图存放地址</param>
/// <param name="side">指定的边长(正方型)</param>
/// <param name="quality">质量(范围0-100)</param>
public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)
{
//创建目录
string dir = Path.GetDirectoryName(fileSaveUrl);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);

//原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)
System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);

//原图宽高均小于模版,不作处理,直接保存
if (initImage.Width <= side && initImage.Height <= side)
{
initImage.Save(fileSaveUrl, 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[] 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);

//保存缩略图
resultImage.Save(fileSaveUrl, ici, ep);

//释放关键质量控制所用资源
ep.Dispose();

//释放缩略图资源
resultG.Dispose();
resultImage.Dispose();

//释放原始图片资源
initImage.Dispose();
}
}

#endregion

#region 自定义裁剪并缩放

/// <summary>
/// 指定长宽裁剪
/// 按模版比例最大范围的裁剪图片并缩放至模版尺寸
/// </summary>
/// <remarks>吴剑 2012-08-08</remarks>
/// <param name="fromFile">原图Stream对象</param>
/// <param name="fileSaveUrl">保存路径</param>
/// <param name="maxWidth">最大宽(单位:px)</param>
/// <param name="maxHeight">最大高(单位:px)</param>
/// <param name="quality">质量(范围0-100)</param>
public static void CutForCustom(System.IO.Stream fromFile, string fileSaveUrl, int maxWidth, int maxHeight, int quality)
{
//从文件获取原始图片,并使用流中嵌入的颜色管理信息
System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);

//原图宽高均小于模版,不作处理,直接保存
if (initImage.Width <= maxWidth && initImage.Height <= maxHeight)
{
initImage.Save(fileSaveUrl, 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.High;
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(fileSaveUrl, 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)System.Math.Floor(initImage.Width / templateRate));
pickedG
= System.Drawing.Graphics.FromImage(pickedImage);

//裁剪源定位
fromR.X = 0;
fromR.Y
= (int)System.Math.Floor((initImage.Height - initImage.Width / templateRate) / 2);
fromR.Width
= initImage.Width;
fromR.Height
= (int)System.Math.Floor(initImage.Width / templateRate);

//裁剪目标定位
toR.X = 0;
toR.Y
= 0;
toR.Width
= initImage.Width;
toR.Height
= (int)System.Math.Floor(initImage.Width / templateRate);
}
//高为标准进行裁剪
else
{
pickedImage
= new System.Drawing.Bitmap((int)System.Math.Floor(initImage.Height * templateRate), initImage.Height);
pickedG
= System.Drawing.Graphics.FromImage(pickedImage);

fromR.X
= (int)System.Math.Floor((initImage.Width - initImage.Height * templateRate) / 2);
fromR.Y
= 0;
fromR.Width
= (int)System.Math.Floor(initImage.Height * templateRate);
fromR.Height
= initImage.Height;

toR.X
= 0;
toR.Y
= 0;
toR.Width
= (int)System.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.High;
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(fileSaveUrl, ici, ep);
//templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);

//释放资源
templateG.Dispose();
templateImage.Dispose();

pickedG.Dispose();
pickedImage.Dispose();
}
}

//释放资源
initImage.Dispose();
}
#endregion

#region 等比缩放

/// <summary>
/// 图片等比缩放
/// </summary>
/// <remarks>吴剑 2012-08-08</remarks>
/// <param name="fromFile">原图Stream对象</param>
/// <param name="savePath">缩略图存放地址</param>
/// <param name="targetWidth">指定的最大宽度</param>
/// <param name="targetHeight">指定的最大高度</param>
/// <param name="watermarkText">水印文字(为""表示不使用水印)</param>
/// <param name="watermarkImage">水印图片路径(为""表示不使用水印)</param>
public static void ZoomAuto(System.IO.Stream fromFile, string savePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)
{
//创建目录
string dir = Path.GetDirectoryName(savePath);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);

//原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)
System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);

//原图宽高均小于模版,不作处理,直接保存
if (initImage.Width <= targetWidth && initImage.Height <= targetHeight)
{
//文字水印
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(savePath, 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(savePath, 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;
}
}

#endregion

/// <summary>
/// 剪裁 -- 用GDI+
/// </summary>
/// <param name="b">原始Bitmap</param>
/// <param name="StartX">开始坐标X</param>
/// <param name="StartY">开始坐标Y</param>
/// <param name="iWidth">宽度</param>
/// <param name="iHeight">高度</param>
/// <returns>剪裁后的Bitmap</returns>
public static bool KiCut(string source, string newpic, int X, int Y, int Width, int Height)
{
Bitmap b
= new Bitmap(source);
if (b == null)
{
return false;
}

int w = b.Width;
int h = b.Height;

if (X >= w || Y >= h)
{
return false;
}

if (X + Width > w)
{
Width
= w - X;
}

if (Y + Height > h)
{
Height
= h - Y;
}

try
{
Bitmap bmpOut
= new Bitmap(Width, Height, PixelFormat.Format24bppRgb);

Graphics g
= Graphics.FromImage(bmpOut);
g.DrawImage(b,
new Rectangle(0, 0, Width, Height), new Rectangle(X, Y, Width, Height), GraphicsUnit.Pixel);
g.Dispose();

bmpOut.Save(newpic);
return true;
}
catch
{
return false;
}
}

}
//end class


public class ImageCut
{
/// <summary>
/// 剪裁 -- 用GDI+
/// </summary>
/// <param name="b">原始Bitmap</param>
/// <param name="StartX">开始坐标X</param>
/// <param name="StartY">开始坐标Y</param>
/// <param name="iWidth">宽度</param>
/// <param name="iHeight">高度</param>
/// <returns>剪裁后的Bitmap</returns>
public Bitmap KiCut(Bitmap b)
{
if (b == null)
{
return null;
}

int w = b.Width;
int h = b.Height;

if (X >= w || Y >= h)
{
return null;
}

if (X + Width > w)
{
Width
= w - X;
}

if (Y + Height > h)
{
Height
= h - Y;
}

try
{
Bitmap bmpOut
= new Bitmap(Width, Height, PixelFormat.Format24bppRgb);

Graphics g
= Graphics.FromImage(bmpOut);
g.DrawImage(b,
new Rectangle(0, 0, Width, Height), new Rectangle(X, Y, Width, Height), GraphicsUnit.Pixel);
g.Dispose();

return bmpOut;
}
catch
{
return null;
}
}

public int X = 0;
public int Y = 0;
public int Width = 120;
public int Height = 120;
public ImageCut(int x, int y, int width, int heigth)
{
X
= x;
Y
= y;
Width
= width;
Height
= heigth;
}
}
}