Asp.net 实现图片缩放 无水印(方法二)

public static System.Drawing.Image GetImage(string path)

        {

            try

            {

                if (path.StartsWith("http"))//获取远程图片

                {

                    System.Net.WebRequest request = System.Net.WebRequest.Create(path);

                    request.Timeout = 10000;

                    System.Net.HttpWebResponse httpresponse = (System.Net.HttpWebResponse)request.GetResponse();

                    Stream s = httpresponse.GetResponseStream();

                    return System.Drawing.Image.FromStream(s);

                }

                else//获取本地图片

                {

                    return System.Drawing.Image.FromFile(path);

                }

            }

            catch (Exception ex) { return null; }

        }



        public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)

        {

            System.Drawing.Image originalImage = GetImage(originalImagePath);// System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(originalImagePath));

            if (originalImage == null)

                return;

            int towidth = width;

            int toheight = height;



            int x = 0;

            int y = 0;

            int ow = originalImage.Width;

            int oh = originalImage.Height;



            if (mode == "EQU")//指定最大高宽,等比例缩放

            {

                //if(height/oh>width/ow),如果高比例多,按照宽来缩放;如果宽的比例多,按照高来缩放

                if (height * ow > width * oh)

                {

                    mode = "W";

                }

                else

                {

                    mode = "H";

                }

            }

            switch (mode)

            {

                case "HW"://指定高宽缩放(可能变形)                   

                    break;

                case "W"://指定宽,高按比例                       

                    toheight = originalImage.Height * width / originalImage.Width;

                    break;

                case "H"://指定高,宽按比例   

                    towidth = originalImage.Width * height / originalImage.Height;

                    break;

                case "Cut"://指定高宽裁减(不变形)                   

                    if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)

                    {

                        oh = originalImage.Height;

                        ow = originalImage.Height * towidth / toheight;

                        y = 0;

                        x = (originalImage.Width - ow) / 2;

                    }

                    else

                    {

                        ow = originalImage.Width;

                        oh = originalImage.Width * height / towidth;

                        x = 0;

                        y = (originalImage.Height - oh) / 2;

                    }

                    break;

                default:

                    break;

            }



            //新建一个bmp图片   

            System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);



            //新建一个画板   

            System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);



            //设置高质量插值法   

            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;



            //设置高质量,低速度呈现平滑程度   

            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;



            //清空画布并以透明背景色填充   

            g.Clear(System.Drawing.Color.Transparent);



            //在指定位置并且按指定大小绘制原图片的指定部分   

            g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),

                new System.Drawing.Rectangle(x, y, ow, oh),

                System.Drawing.GraphicsUnit.Pixel);

            try

            {

                //以jpg格式保存缩略图   

                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);

            }

            catch (System.Exception e)

            {

                throw e;

            }

            finally

            {

                originalImage.Dispose();

                bitmap.Dispose();

                g.Dispose();

            }

        }

 

你可能感兴趣的:(asp.net)