EasyFRMS.Image C# 实现图片剪切、缩放、旋转、水印操作

本文介绍了C#库EasyFRMS.Image,提供了图片剪切、缩放、旋转和添加水印的功能。通过枚举PositionMode、ResizeMode和RotateMode定义了操作模式,代码示例展示了如何使用这些功能来处理图片,包括从源图剪切、缩放、填充和旋转图片,并保存为高质量的JPEG格式。
摘要由CSDN通过智能技术生成

    /// <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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值