图片缩放

 

/// <summary>
        /// 图片转换
        /// </summary>
        /// <param name="image"></param>
        /// <param name="directoryPath">目录路径</param>
        /// <param name="imageenum"></param>
        /// <param name="qualityNum">图片质量</param>
        public void ImageTransformation(Image image, string directoryPath, ImageFormatEnum imageenum = ImageFormatEnum._1080, long qualityNum = 100)
        {
            var ext = Path.GetExtension(directoryPath);
            ext = ext.Substring(ext.LastIndexOf('.') + 1);  //去除点 .jpeg  =>   jpeg
            int oldWidth = image.Width;
            int oldHeight = image.Height;

            int newWidth = 0;
            int newHeight = 0;

            if (oldWidth > oldHeight && oldWidth > (int)imageenum)
            {
                newWidth = (int)imageenum;
                newHeight = Convert.ToInt32(oldHeight * newWidth / oldWidth);
            }
            else if (oldHeight > oldWidth && oldHeight > (int)imageenum)
            {
                newHeight = (int)imageenum;
                newWidth = Convert.ToInt32(oldWidth * newHeight / oldHeight);
            }
            else if (oldWidth == oldHeight && oldWidth > (int)imageenum)
            {
                newHeight = (int)imageenum;
                newWidth = Convert.ToInt32(oldWidth * newHeight / oldHeight);
            }
            else
            {
                newWidth = Convert.ToInt32(oldWidth);
                newHeight = Convert.ToInt32(oldHeight);
            }

            //新建图片
            Image newimage = new Bitmap(newWidth, newHeight);
            //新建画板
            Graphics g = Graphics.FromImage(newimage);
            //清空画布并设置背景色
            g.Clear(Color.Transparent);
            //设置画布的绘画质量
            g.CompositingQuality = CompositingQuality.HighQuality;
            //设置高质量,低速度呈现平滑程度
            g.SmoothingMode = SmoothingMode.HighQuality;
            //设置高质量插值法
            g.InterpolationMode = InterpolationMode.HighQualityBilinear;
            //显示图像的位置
            Rectangle destRect = new Rectangle(0, 0, newWidth, newHeight);
            //显示图像那一部分
            Rectangle srcRect = new Rectangle(0, 0, image.Width, image.Height);
            g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel);
            g.Dispose();

            //以下代码为保存图片时,设置压缩质量
            EncoderParameters encoderParams = new EncoderParameters();
            EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, qualityNum);
            encoderParams.Param[0] = encoderParam;
            //var format = GetImageFormat(image).ToString().ToLower();
            //var encoder = GetEncoderInfo("image/" + format);
            var encoder = GetEncoderInfo("image/" + ext);
            newimage.Save(directoryPath, encoder, encoderParams);
            newimage.Dispose();
            newimage = null;
        }

        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;
        }
        /// <summary>
        /// 图片格式
        /// </summary>
        public enum ImageFormatEnum
        {
            _640 = 640,
            _800 = 800,
            _1024 = 1024,
            _1080 = 1080,
            _1920 = 1920,
            _2560 = 2560,
            _b = 0      //原图
        }


        /// <summary>
        ///获取图片格式
        /// </summary>
        /// <param name="img">图片</param>
        /// <returns>默认返回JPEG</returns>
        public ImageFormat GetImageFormat(Image img)
        {
            if (img.RawFormat.Equals(ImageFormat.Jpeg))
            {
                return ImageFormat.Jpeg;
            }
            if (img.RawFormat.Equals(ImageFormat.Gif))
            {
                return ImageFormat.Gif;
            }
            if (img.RawFormat.Equals(ImageFormat.Png))
            {
                return ImageFormat.Png;
            }
            if (img.RawFormat.Equals(ImageFormat.Bmp))
            {
                return ImageFormat.Bmp;
            }
            return ImageFormat.Jpeg;//根据实际情况选择返回指定格式还是null
        }

 

下载: Demo
posted @ 2016-04-18 16:30  鞍山老菜鸟  阅读(158)  评论(0编辑  收藏  举报