华域联盟 .Net asp.net生成缩略图示例方法分享

asp.net生成缩略图示例方法分享

做站的时候经常会遇到要生成缩略图的功能,因为可能不同的情况需要用来不同大小的缩略图。

本文生成的图片都为正方形,只有正方形的缩略图才是保证图片足够清晰。

当我我这里说的正方形是先按比例压缩,然后加一个固定的白底 然后居中显示。

代码:

新建outputimg.ashx

复制代码 代码如下:

//调整图片大小

private static Size NewSize(int maxWidth, int maxHeight, int Width, int Height)

        {

            double w = 0.0;

            double h = 0.0;

            double sw = Convert.ToDouble(Width);

            double sh = Convert.ToDouble(Height);

            double mw = Convert.ToDouble(maxWidth);

            double mh = Convert.ToDouble(maxHeight);

            if (sw < mw && sh < mh)//如果maxWidth和maxHeight大于源图像,则缩略图的长和高不变
            {
                w = sw;
                h = sh;
            }
            else if ((sw / sh) > (mw / mh))
            {
                w = maxWidth;
                h = (w * sh) / sw;
            }
            else
            {
                h = maxHeight;
                w = (h * sw) / sh;
            }
            return new Size(Convert.ToInt32(w), Convert.ToInt32(h));
        }

复制代码 代码如下:

//生成缩略图

public static void SendSmallImage(string filename, string newfile, int maxHeight, int maxWidth, string mode)

        {

            System.Drawing.Image img = System.Drawing.Image.FromFile(filename);//源图像的信息

            System.Drawing.Imaging.ImageFormat thisformat = img.RawFormat; //源图像的格式

            Size newSize = NewSize(maxWidth, maxHeight, img.Width, img.Height); //返回调整后的图像Width与Height

            Bitmap outBmp = new Bitmap(maxWidth, maxHeight);

            Graphics g = Graphics.FromImage(outBmp);

            //设置画布的描绘质量

            g.CompositingQuality = CompositingQuality.HighQuality;

            g.SmoothingMode = SmoothingMode.HighQuality;

            g.InterpolationMode = InterpolationMode.HighQualityBicubic;

            g.Clear(Color.White);

            g.DrawImage(img, new Rectangle(((maxWidth - newSize.Width) / 2), ((maxHeight - newSize.Height) / 2), newSize.Width, newSize.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);

            g.Dispose();

            //以下代码为保存图片时,设置压缩质量

            EncoderParameters encoderParams = new EncoderParameters();

            long[] quality = new long[1];

            quality[0] = 100;

            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

            encoderParams.Param[0] = encoderParam;

            //获取包含有关内置图像编码解码器的信息的ImageCodecInfo对象。

            ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

            ImageCodecInfo jpegICI = null;

            for (int x = 0; x < arrayICI.Length; x++)

            {

                if (arrayICI[x].FormatDescription.Equals("JPEG"))

                {

                    jpegICI = arrayICI[x];//设置jpeg编码

                    break;

                }

            }

            if (jpegICI != null)

            {

                outBmp.Save(newfile, jpegICI, encoderParams);

            }

            else

            {

                outBmp.Save(newfile, thisformat);

            }

            img.Dispose();

            outBmp.Dispose();

        }

输出图片:

复制代码 代码如下:

//输出图片

        public static void OutPutImg(string imgFilePath)

        {

            FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(imgFilePath), FileMode.Open, FileAccess.Read);

            DateTime contentModified = System.IO.File.GetLastWriteTime(HttpContext.Current.Server.MapPath(imgFilePath));

            if (IsClientCached(contentModified))

            {

                HttpContext.Current.Response.StatusCode = 304;

                HttpContext.Current.Response.SuppressContent = true;

            }

            else

            {

                byte[] mydata = new byte[fs.Length];

                int Length = Convert.ToInt32(fs.Length);

                fs.Read(mydata, 0, Length);

                fs.Close();

                HttpContext.Current.Response.OutputStream.Write(mydata, 0, Length);

                HttpContext.Current.Response.ContentType = "image/jpeg";

                HttpContext.Current.Response.End();

                HttpContext.Current.Response.Cache.SetETagFromFileDependencies();

                HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);

                HttpContext.Current.Response.Cache.SetLastModified(contentModified);

            }

        }

复制代码 代码如下:

//outpuimg.ashx?src=/images/weimeidesc/8af30049-797e-4eb4-8a54-cc4de47c1694.jpg!100x100.jpg

        public void ProcessRequest(HttpContext context)

        {

            //获取图片

            string imgUrl = context.Request.QueryString["src"];

            string trueFilePath = imgUrl.Split('!')[0];

            //获取图片大小

            int width = Convert.ToInt32(imgUrl.Split('!')[1].Replace(".jpg", "").Split('x')[0]);

            int height = Convert.ToInt32(imgUrl.Split('!')[1].Replace(".jpg", "").Split('x')[1]);

            //图片已经存在直接输出

            if (File.Exists(context.Server.MapPath("~/" + imgUrl)))

            {

                OutPutImg("~/"+imgUrl);

            }

            else

            {

                if (!string.IsNullOrEmpty(imgUrl) && File.Exists(context.Server.MapPath("~/" + trueFilePath)))

                {

                    Image originalImage = System.Drawing.Image.FromFile(context.Server.MapPath("~/" + trueFilePath));

                    var newBitmap = new Bitmap(originalImage);

                    //生成相应的小图并保存

                    SendSmallImage(context.Server.MapPath("~/" + trueFilePath),context.Server.MapPath("~/" + imgUrl), width, height, "meiyouyisi");

                    //输出

                    OutPutImg("~/" + imgUrl);

                }

                else//图片如果不存在 输出默认图片

                {

                    //OutPutImg(imgUrl);

                }

            }

        }

您可能感兴趣的文章:

  • ASP.NET创建动态缩略图的方法
  • asp.net中生成缩略图并添加版权实例代码
  • asp.net生成缩略图实现代码
  • asp.net文件上传功能(单文件,多文件,自定义生成缩略图,水印)
  • asp.net 生成缩略图代码
  • asp.net 上传图片并同时生成缩略图的代码
  • asp.net 点缩略图弹出随图片大小自动调整的页面
  • ASP.Net 上传图片并生成高清晰缩略图
  • asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
  • ASP.NET中高质量缩略图的生成代码
  • asp.net图片上传生成缩略图的注意事项
  • ASP.NET实现根据URL生成网页缩略图的方法

本文由 华域联盟 原创撰写:华域联盟 » asp.net生成缩略图示例方法分享

转载请保留出处和原文链接:https://www.cnhackhy.com/53246.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部