/// <summary>
/// 功能:Shenxu 水印位置模式
/// 作者:Tianeyi 申栩
/// 日期:2009-03-18
/// </summary>
public enum PositionMode
{
None, TopLeft, TopRight, Middle, BottomLeft, BottomRight
}
/// <summary>
/// 功能:Shenxu 图片缩放模式
/// 作者:Tianeyi 申栩
/// 日期:2009-03-18
/// </summary>
public enum ResizeMode
{
Center, Stretch
}
/// <summary>
/// 功能:Shenxu 图片旋转模式
/// 作者:Tianeyi 申栩
/// 日期:2009-03-18
/// </summary>
public enum RotateMode
{
TurnLeft, TurnRight, TurnVertical, TurnHorizontal
}
/// <summary>
/// 从源图剪切图片至目标位置
/// </summary>
/// <param name="ImageBytes">byte[] 源图数据</param>
/// <param name="Width">int 宽度</param>
/// <param name="Height">int 高度</param>
/// <param name="Position">PositionMode 位置</param>
/// <returns>byte[] 目标图数据</returns>
public static byte[] CutImage(byte[] ImageBytes, int Width, int Height, PositionMode Position)
{
Image _SourceImage = Image.FromStream(new MemoryStream(ImageBytes));
Bitmap _CanvasBitmap = new Bitmap(Width, Height, PixelFormat.Format24bppRgb);
Graphics _CanvasGraphics = Graphics.FromImage(_CanvasBitmap);
Rectangle _SourceRect = GetCutRect(new Rectangle(0, 0, _SourceImage.Width, _SourceImage.Height), Position, Width, Height);
Rectangle _TargetRect = GetCutRect(new Rectangle(0, 0, _SourceImage.Width, _SourceImage.Height), Width, Height);
_CanvasGraphics.CompositingQuality = CompositingQuality.HighQuality;
_CanvasGraphics.SmoothingMode = SmoothingMode.AntiAlias;
_CanvasGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
_CanvasGraphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
_CanvasGraphics.FillRectangle(new SolidBrush(Color.White), 0, 0, _CanvasBitmap.Width, _CanvasBitmap.Height);
_CanvasGraphics.DrawImage(_SourceImage, _TargetRect, _SourceRect, GraphicsUnit.Pixel);
EncoderParameters _TargetEncoder = new EncoderParameters(1);
_TargetEncoder.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
ImageCodecInfo _TargetCodec = GetEncoderInfo("image/jpeg");
MemoryStream _TargetMemory = new MemoryStream();
if (_TargetCodec != null)
{
_CanvasBitmap.Save(_TargetMemory, _TargetCodec, _TargetEncoder);
}
else
{
_CanvasBitmap.Save(_TargetMemory, ImageFormat.Jpeg);
}
_TargetEncoder.Dispose();
_TargetEncoder = null;
_CanvasGraphics.Dispose();
_CanvasGraphics = null;
_CanvasBitmap.Dispose();
_CanvasBitmap = null;
_SourceImage.Dispose();
_SourceImage = null;
return _TargetMemory.GetBuffer();
}
/// <summary>
/// 对图片进行缩放操作
/// </summary>
/// <param name="ImageBytes">byte[] 源图数据</param>
/// <param name="Size">double 缩放参数</param>
/// <returns>byte[] 目标图数据</returns>
public static byte[] ZoomImage(byte[] ImageBytes, double Size)
{
Image _SourceImage = Image.FromStream(new MemoryStream(ImageBytes));
Rectangle _SourceRect = new Rectangle(0, 0, _SourceImage.Width, _SourceImage.Height);
Rectangle _TargetRect = GetZoomRect(_SourceRect, Size);
Bitmap _CanvasBitmap = new Bitmap(_TargetRect.Width, _TargetRect.Height, PixelFormat.Format24bppRgb);
Graphics _CanvasGraphics = Graphics.FromImage(_CanvasBitmap);
_CanvasGraphics.CompositingQuality = CompositingQuality.HighQuality;
_CanvasGraphics.SmoothingMode = SmoothingMode.AntiAlias;
_CanvasGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
_CanvasGraphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
_CanvasGraphics.DrawImage(_SourceImage, _TargetRect, _SourceRect, GraphicsUnit.Pixel);
EncoderParameters _TargetEncoder = new EncoderParameters(1);
_TargetEncoder.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
ImageCodecInfo _TargetCodec = GetEncoderInfo("image/jpeg");
MemoryStream _TargetMemory = new MemoryStream();
if (_TargetCodec != null)
{
_CanvasBitmap.Save(_TargetMemory, _TargetCodec, _TargetEncoder);
}
else
{
_CanvasBitmap.Save(_TargetMemory, ImageFormat.Jpeg);
}
_TargetEncoder.Dispose();
_TargetEncoder = null;
_CanvasGraphics.Dispose();
_CanvasGraphics = null;
_CanvasBitmap.Dispose();
_CanvasBitmap = null;
_SourceImage.Dispose();
_SourceImage = null;
return _TargetMemory.GetBuffer();
}
/// <summary>
/// 对图片进行填充操作
/// </summary>
/// <param name="ImageBytes">byte[] 源图数据</param>
/// <param name="Width">int 宽度</param>
/// <param name="Height">int 高度</param>
/// <param name="BackColor">string 颜色名称</param>
/// <param name="Position">PositionMode 位置</param>
/// <returns>byte[] 目标图数据</returns>
public static byte[] CenterImage(byte[] ImageBytes, int Width, int Height, string BackColor, PositionMode Position)
{
Image _S