您的位置:首页 > 编程语言 > ASP

使用ASP.NET上传图片并生成缩略图

2007-08-04 10:59 826 查看
环境:VS.NET2005 + Windows2003
就是一个简单的将图片上传到服务器,并按照需求生成缩略图。在上传图片较大的时候,可以生成一个较小的图片放在网页里,这样可以加快浏览的速度。可根据需要链接到大图片再仔细浏览。
 

不是很复杂,大概写一下。目的只在于实现,未仔细按照标准什么的来写。其中参考了网上已经存在的代码。
using System.Drawing;
页面,如图:



点击提交按钮:
              HttpPostedFile hpf = UploadImage.PostedFile;
 

        //取得文件名(不含路径)
        char[] splitChar = { '//' };
        string[] FilenameArray = hpf.FileName.Split(splitChar);
        string Filename = FilenameArray[FilenameArray.Length - 1].ToLower();
 

        if (hpf.FileName.Length < 1)
        {
            Response.Write("请选择您要上传的图片文件");
            return;
        }
        if (hpf.ContentType != "image/pjpeg" && hpf.ContentType != "image/gif")
        {
            Response.Write("只允许上传 GIF JPG类型的文件");
            return;
        }
        else
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append(DateTime.Now.Year.ToString());
            sb.Append(DateTime.Now.Month.ToString());
            sb.Append(DateTime.Now.Day.ToString());
            sb.Append(DateTime.Now.Hour.ToString());
            sb.Append(DateTime.Now.Minute.ToString());
            sb.Append(DateTime.Now.Second.ToString());
            if (Filename.ToLower().EndsWith("gif"))
            {
                sb.Append(".gif");
            }
            else if (Filename.ToLower().EndsWith("jpg"))
            {
                sb.Append(".jpg");
            }
            else if (Filename.ToLower().EndsWith("jpeg"))
            {
                sb.Append(".jpeg");
            }
            Filename = sb.ToString();
        }
 

        // 保存图片到服务器上
        try
        {
            hpf.SaveAs(Server.MapPath("..") + "/Image/" + Filename);
        }
        catch (Exception ee)
        {
            Response.Write("上传图片失败,原因" + ee.Message);
            return;
        }
 

      
        // 生成缩略图
        //原始图片名称
        string originalFilename = hpf.FileName;
        //生成的高质量图片名称
        string strFile = Server.MapPath("..") + "/Image/Small_" + Filename;
 

 

        //从文件取得图片对象
        System.Drawing.Image image = System.Drawing.Image.FromStream(hpf.InputStream, true);
 

        Double Width = Double.Parse(TextBox1.Text.Trim());
        Double Height = Double.Parse(TextBox2.Text.Trim());
        System.Double NewWidth, NewHeight;
       
        if (image.Width > image.Height)
        {
            NewWidth = Width;
            NewHeight = image.Height * (NewWidth / image.Width);
        }
        else
        {
            NewHeight = Height;
            NewWidth = (NewHeight / image.Height) * image.Width;
        }
 

        if (NewWidth > Width)
        {
            NewWidth = Width;
        }
        if (NewHeight > Height)
        {
            NewHeight = Height;
        }
 

        System.Drawing.Size size = new Size((int)NewWidth, (int)NewHeight); // 图片大小
        System.Drawing.Image bitmap = new System.Drawing.Bitmap(size.Width, size.Height);   //新建bmp图片
        System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);       //新建画板
        graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;       //设置高质量插值法
        graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;        //设置高质量,低速度呈现平滑程度
        graphics.Clear(Color.White);        //清空画布
        //在指定位置画图
        graphics.DrawImage(image, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
            new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
            System.Drawing.GraphicsUnit.Pixel);
 

           //文字水印
        System.Drawing.Graphics textGraphics = System.Drawing.Graphics.FromImage(bitmap);
        System.Drawing.Font font = new Font("宋体", 10);
        System.Drawing.Brush brush = new SolidBrush(Color.Black);
        textGraphics.DrawString(TextBox3.Text.Trim(), font, brush, 10, 10);
        textGraphics.Dispose();
 

        ///图片水印
        //System.Drawing.Image copyImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("pic/1.gif"));
        //Graphics a = Graphics.FromImage(bitmap);
        //a.DrawImage(copyImage, new Rectangle(bitmap.Width-copyImage.Width,bitmap.Height-copyImage.Height,copyImage.Width, copyImage.Height),0,0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
 

        //copyImage.Dispose();
        //a.Dispose();
        //copyImage.Dispose();
 

 

        //保存缩略图
        try
        {
            bitmap.Save(strFile, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        catch (Exception ex)
        {
            Response.Write("保存缩略图失败:" + ex.Message);
        }
       
 

        graphics.Dispose();
        image.Dispose();
        bitmap.Dispose();
 

整个实现的过程如下面的图:
浏览页面,选择图片:



点击提交后,图片以及缩略图都已经生成到了目标文件夹里面:



可以看到,缩略图里面文字水印已经生成:



 

至此,整个功能已实现。
在生成缩略图的时候,可以根据需要对图片以及水印进行处理。更多帮助,请参阅MSDN。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐