C# 对图片进行指定尺寸缩放

/// <summary>
        /// 根据指定最长边大小,对指定图片进行缩放并返回转换后文件的路径
        /// </summary>
        /// <param name="filename">待处理图像文件路径</param>
        /// <param name="newS">转换后图像的长边像素大小</param>
        /// <param name="newPX">转换后图像的分辨率,默认为原图分辨率</param>
        /// <returns>转换后文件路径</returns>
        public string ImageScale(string filename, decimal newS,float newPX=0)
        {
            using (Image oldimg = Image.FromFile(filename))
            {
                decimal newW = oldimg.Width;
                decimal newH = oldimg.Height;
                if (newPX <= 0) newPX = oldimg.HorizontalResolution;

                if (newW > newH)
                {
                    newH = newH * newS / newW;
                    newW = newS;
                }
                else
                {
                    newW = newW * newS / newH;
                    newH = newS;
                }
                Bitmap image = new Bitmap((int)newW, (int)newH, PixelFormat.Format24bppRgb);
                try
                {
                    image.SetResolution(newPX, newPX);
                    Graphics g = Graphics.FromImage(image);
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.DrawImage(oldimg, new Rectangle(0, 0, image.Width, image.Height), new Rectangle(0, 0, oldimg.Width, oldimg.Height), GraphicsUnit.Pixel);
                    g.Dispose();
                    oldimg.Dispose();
                    return SaveToJpg(image);
                    
                }
                catch (Exception ex) { }
                finally
                {
                    try
                    {
                        image.Dispose();
                    }
                    catch { }
                }
            }
            return "";
        }

        /// <summary>
        /// 保存图片
        /// </summary>
        /// <param name="image"></param>
        /// <returns></returns>
        public string SaveToJpg(Bitmap image)
        {
            string fpath = Path.GetTempFileName();//创建一个临时文件保存转换后文件
            ImageCodecInfo[] imageCodecInfos = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo imageCodecInfo = null;
            foreach (ImageCodecInfo info in imageCodecInfos)
            {
                if (info.MimeType == "image/jpeg")
                {
                    imageCodecInfo = info;
                    break;
                }
            }
            EncoderParameters encoderParams = new EncoderParameters(2);
            encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
            encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 0x20L);            
            image.Save(fpath, imageCodecInfo, encoderParams);
            return fpath;
        }
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    请登录后查看评论内容