• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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 操作cookie的简单实例
    下一篇:ASP.NET 程序中删除文件夹导致session失效问题的解决办法分享
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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