生成缩略图片 - C# Notes

图片上传并按指定大小保存

图片上传并按指定大小保存
        /// <summary>
        /// 按指定大小保存图片
        /// </summary>
        /// <param name="postedFile"></param>
        /// <param name="fileSavePath"></param>
        private void SaveAsSize(HttpPostedFile postedFile, string fileSavePath, int width, int height, ThumbnailModel mode)
        {
            int toWidth = width;
            int toHeight = height;
            int x = 0;
            int y = 0;

            Image image = Image.FromStream(postedFile.InputStream);
            int imgW = image.Width;
            int imgH = image.Height;

            switch (mode)
            {
                case ThumbnailModel.Width: //指定宽,高按比例   
                    toHeight = image.Height * width / image.Width;
                    break;
                case ThumbnailModel.Hight: //指定高,宽按比例  
                    toWidth = image.Width * height / image.Height;
                    break;
                case ThumbnailModel.Default: //默认,全图不变形  
                    if (imgW <= toWidth && imgH <= toHeight)//若原图小,则原图居中
                    {
                        x = -(toWidth - imgW) / 2;
                        y = -(toHeight - imgH) / 2;
                        imgW = toWidth;
                        imgH = toHeight;
                    }
                    else
                    {
                        if (imgW > imgH)//宽大于高
                        {
                            x = 0;
                            y = -(imgW - imgH) / 2;
                            imgH = imgW;
                        }
                        else//高大于宽
                        {
                            y = 0;
                            x = -(imgH - imgW) / 2;
                            imgW = imgH;
                        }
                    }
                    break;
                case ThumbnailModel.Auto://自动,原始图片按比例缩放
                    if (image.Width / image.Height >= width / height)
                    {
                        if (image.Width > width)
                        {
                            toWidth = width;
                            toHeight = (image.Height * width) / image.Width;
                        }
                        else
                        {
                            toWidth = image.Width;
                            toHeight = image.Height;
                        }
                    }
                    else
                    {
                        if (image.Height > height)
                        {
                            toHeight = height;
                            toWidth = (image.Width * height) / image.Height;
                        }
                        else
                        {
                            toWidth = image.Width;
                            toHeight = image.Height;
                        }
                    }
                    break;
                case ThumbnailModel.Cut: //指定高宽裁减(不变形)   
                    if ((double)image.Width / image.Height > (double)toWidth / toHeight)
                    {
                        imgH = image.Height;
                        imgW = image.Height * toWidth / toHeight;
                        y = 0;
                        x = (image.Width - imgW) / 2;
                    }
                    else
                    {
                        imgW = image.Width;
                        imgH = image.Width * height / toWidth;
                        x = 0;
                        y = (image.Height - imgH) / 2;
                    }
                    break;
                case ThumbnailModel.HighWidth: //指定高宽缩放(可能变形)   
                default:
                    break;
            }

            Image newImg = new Bitmap(toWidth, toHeight);
            Graphics graphics = Graphics.FromImage(newImg);
            graphics.Clear(Color.White);//空白背景
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//插值模式-高质量
            graphics.SmoothingMode = SmoothingMode.HighQuality;//平滑模式-高质量
            graphics.DrawImage(image, new Rectangle(0, 0, toWidth, toHeight), new Rectangle(0, 0, imgW, imgH), GraphicsUnit.Pixel);
            EncoderParameters encoderParameters = new EncoderParameters();
            EncoderParameter encoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
            encoderParameters.Param[0] = encoderParameter;
            ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo encoder = null;
            for (int i = 0; i < imageEncoders.Length; i++)
            {
                if (imageEncoders[i].FormatDescription.Equals("JPEG"))
                {
                    encoder = imageEncoders[i];
                    break;
                }
            }
            newImg.Save(fileSavePath, encoder, encoderParameters);//保存文件
            encoderParameters.Dispose();
            encoderParameter.Dispose();
            image.Dispose();
            newImg.Dispose();
            graphics.Dispose();
        }

 

   

 

 End

posted on 2017-08-21 10:13  呼呼net  阅读(243)  评论(0编辑  收藏  举报

导航