zoukankan      html  css  js  c++  java
  • asp.net2.0 上传图片(FileUpload控件) 并生成缩略图

    记录,备忘:

    (1)

    using System.IO; //添加

    (2)

    在页面上放入一个FileUpload控件,id为“FileUpload1”,和一个“上传”按钮,id为“btnUpload”。

    /// <summary>
    ///
    "上传"按钮
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected voidbtnUpload_Click(objectsender, EventArgse)
    {
        stringserverPath = Server.MapPath("~/images/product");//设置图片路径

       
    if(this.FileUpload1.HasFile)
        {
            stringname=FileUpload1.FileName;
            stringfName = this.txtImageName.Text;
            if(string.IsNullOrEmpty(fName))
            {
                fName = name;
            }
            stringtype = fName.Substring(fName.LastIndexOf(".") + 1).ToLower();           
            if(type == "jpg"|| type == "png"|| type == "bmp"|| type == "gif"|| type == "jpeg")
            {
                UpLoadImage(serverPath,fName);//执行上传图片,并生成缩略图
           
    }
            else
          
    {
                HttpContext.Current.Response.Write("<script>alert('图片格式不对!');</script>");
                return;
            }
        }
        else
      
    {
            HttpContext.Current.Response.Write(" <script>alert('请选择要上传的文件') </script>");
            return;
        }
        HttpContext.Current.Response.Write(" <script>alert('文件上传成功') </script>");
    }

    /// <summary>
    ///
    执行上传图片操作,并生成缩略图
    /// </summary>
    /// <param name="serverPath"></param>
    /// <param name="fName"></param>
    private voidUpLoadImage(stringserverPath, stringfName)
    {
        if(!File.Exists(serverPath))
        {
             Directory.CreateDirectory(serverPath);
             Directory.CreateDirectory(serverPath + "_thumb");
        }
        stringfPath = serverPath + "\\"+ fName;//文件实际路径

        Stringtpath = serverPath + "_thumb\\"+ fName;//缩略图路径 

        if(!File.Exists(tpath) && !File.Exists(fPath))
        {       
            
    this.FileUpload1.SaveAs(fPath);//上传到图片路径       
            
    ImageClass.MakeThumbnail(fPath, tpath, 180, 117, "w"); //调用ImageClass类的MakeThumbnail()方法,生成缩略图
             this.myImage.ImageUrl = "~/images/product_thumb"+ "\\"+ fName;
        }
        else
      
    {
             HttpContext.Current.Response.Write("<script>alert('图片已存在!');</script>");
             return;
        }
    }

    (3)ImageClass类(转,网址忘记了)

    //add
    usingSystem.Data;
    usingSystem.Configuration;
    usingSystem.Web.UI;
    usingSystem.IO;

    /// <summary>
    ///
    生成缩略图
    /// </summary>
    /// <param name="originalImagePath">
    源图路径(物理路径)</param>
    /// <param name="thumbnailPath">
    缩略图路径(物理路径)</param>
    /// <param name="width">
    缩略图宽度</param>
    /// <param name="height">
    缩略图高度</param>
    /// <param name="mode">
    生成缩略图的方式</param> 
    public static voidMakeThumbnail(stringoriginalImagePath, stringthumbnailPath, intwidth, intheight, stringmode)
    {
        System.Drawing.ImageoriginalImage = System.Drawing.Image.FromFile(originalImagePath);

        inttowidth = width;
        inttoheight = height;

        intx = 0;
        inty = 0;
        intow = originalImage.Width;
        intoh = originalImage.Height;

        if(ow < towidth && oh < toheight)
        {
            originalImage.Save(thumbnailPath);
        }
        else
      
    {

            switch(mode.ToUpper())
            {
                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;
                case"AUTO": //自动适应高度
                   
    if(ow > oh)
                    {
                        //newwidth = 200;
                      
    toheight = (int)((double)oh / (double)ow * (double)towidth);
                    }
                    else
                  
    {
                        //newheight = 200;
                      
    towidth = (int)((double)ow / (double)oh * (double)toheight);
                    }
                    break;
                default:
                    break;
            }

            //新建一个bmp图片
           
    System.Drawing.Imagebitmap = newSystem.Drawing.Bitmap(towidth, toheight);

            //新建一个画板
           
    System.Drawing.Graphicsg = 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, newSystem.Drawing.Rectangle(0, 0, towidth, toheight),
                newSystem.Drawing.Rectangle(x, y, ow, oh),
                System.Drawing.GraphicsUnit.Pixel);

            try
          
    {
                //以jpg格式保存缩略图
               
    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);

            }
            catch(System.Exceptione)
            {
                throwe;
            }
            finally
          
    {

                bitmap.Dispose();
                g.Dispose();
            }
        }
        originalImage.Dispose();
    }

  • 相关阅读:
    Win10 安装 Oracle32bit客户端 提示:引用数据不可用于验证此操作系统分发的先决条件
    ORACLE 拆分逗号分隔字符串函数
    PLSQL 中文乱码
    不要把分层当做解耦!
    MySQL 迁移到 PG 怎么做
    在 MySQL 创造类似 PipelineDB 的流视图(continuous view)
    TeamViewer 的替代品 ZeroTier + NoMachine
    所有 HTML attribute
    使用PG的部分索引
    基于 500 份标注数据用深度学习破解验证码
  • 原文地址:https://www.cnblogs.com/skyshenwei/p/1660154.html
Copyright © 2011-2022 走看看