/// <summary>
    /// 图片帮助类
    /// </summary>
    internal class MagicImageHelper
    {

        /// <summary>
        /// 转换Jpg渐进式
        /// </summary>
        /// <param name="data">图片数据</param> 
        /// <returns></returns>
        public byte[] ConvertProgressive(byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            byte[] resData = data;
            return resData;
        }

        /// <summary>
        /// 固定宽度等比缩放图片
        /// </summary>
        /// <param name="data"></param>
        /// <param name="width"></param>
        /// <returns></returns>
        public byte[] ScaleImageByWith(byte[] data, int width)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            byte[] copyData = new byte[data.Length];
            data.CopyTo(copyData, 0);
            using (MemoryStream sourceStream = new MemoryStream(copyData))
            {
                var originalImage = Image.FromStream(sourceStream);
                var destHeight = originalImage.Height * width / originalImage.Width;
                var resData = Zoom(data, width, destHeight);
                return resData;
            }
        }

        /// <summary>
        /// 图片缩放
        /// </summary>
        /// <param name="data"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public byte[] Zoom(byte[] data, int width, int height)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            byte[] copyData = new byte[data.Length];
            data.CopyTo(copyData, 0);
            using (MemoryStream sourceStream = new MemoryStream(copyData))
            {
                using (var originalImage = Image.FromStream(sourceStream))
                {
                    using (Bitmap destBitmap = new Bitmap(width, height))
                    {
                        using (Graphics g = Graphics.FromImage(destBitmap))
                        {
                            g.InterpolationMode = InterpolationMode.High;
                            g.SmoothingMode = SmoothingMode.HighQuality;
                            g.Clear(System.Drawing.Color.Transparent);

                            var srcRect = new Rectangle(0, 0, originalImage.Width, originalImage.Height);
                            var destRect = new Rectangle(0, 0, width, height);

                            g.DrawImage(originalImage, destRect, srcRect, GraphicsUnit.Pixel);
                            using (MemoryStream destStream = new MemoryStream())
                            {
                                destBitmap.Save(destStream, originalImage.RawFormat);
                                var result = destStream.ToArray();
                                return result;
                            }
                        }
                    }
                }
            }
        }

        /// <summary>
        /// 裁剪图片
        /// </summary>
        /// <param name="data"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns></returns>
        public byte[] Clip(byte[] data, int x, int y, int width, int height)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            byte[] copyData = new byte[data.Length];
            data.CopyTo(copyData, 0);
            using (MemoryStream sourceStream = new MemoryStream(copyData))
            {
                using (var originalImage = Image.FromStream(sourceStream))
                {
                    using (Bitmap destBitmap = new Bitmap(width, height))
                    {

                        using (var g = Graphics.FromImage(destBitmap))
                        {
                            g.InterpolationMode = InterpolationMode.High;
                            g.SmoothingMode = SmoothingMode.HighQuality;
                            g.Clear(System.Drawing.Color.Transparent);
                            Rectangle destRect = new Rectangle(0, 0, width, height);
                            Rectangle srcRect = new Rectangle(x, y, width, height);
                            g.DrawImage(originalImage, destRect, srcRect, GraphicsUnit.Pixel);
                            using (MemoryStream destStream = new MemoryStream())
                            {
                                destBitmap.Save(destStream, originalImage.RawFormat);
                                var resData = destStream.ToArray();
                                return resData;
                            }
                        }
                    }
                }


            }

        }
    }