当前位置: 代码迷 >> ASP.NET >> 上传图片怎么在DATALIST上生成缩略图
  详细解决方案

上传图片怎么在DATALIST上生成缩略图

热度:5373   发布时间:2013-02-25 00:00:00.0
上传图片如何在DATALIST上生成缩略图?
我要在DATALIST上显示上传的图片,可是上传后图片严重的变形了!上传图片如何在DATALIST上生成缩略图?

------解决方案--------------------------------------------------------
只设置Height或者只设置Width就不会变形,不过你想完美解决这个问题,就是个比较有难度的问题了
------解决方案--------------------------------------------------------
你可以在上传图片的时候进行图片编辑,单独生成一个缩略图文件,在datalist里面读的时候就不要读原图,直接读缩略图就行了
可以给段代码你参考下
C# code
 protected void Button1_Click(object sender, EventArgs e)        {            if (FileUpload1.HasFile)            {                string fileContentType = FileUpload1.PostedFile.ContentType;                if (fileContentType == "image/bmp" || fileContentType == "image/pjpeg")                {                    string name = FileUpload1.PostedFile.FileName; // 客户端文件路径                     FileInfo file = new FileInfo(name);                    string fileName =  file.Name; // 文件名称                     string upfilename = DateTime.Now.ToString("yyMMddhhmmss") + file.Name;                    string fileName_s =  "s_" + upfilename; // 缩略图文件名称                     string webFilePath = Server.MapPath("file/" + upfilename); // 服务器端文件路径                     string webFilePath_s = Server.MapPath("file/" + fileName_s); // 服务器端缩略图路径                     if (!File.Exists(webFilePath))                    {                        try                        {                            FileUpload1.SaveAs(webFilePath); // 使用 SaveAs 方法保存文件                             // 生成缩略图方法                             MakeThumbnail(webFilePath, webFilePath_s, 130, 130, "Cut");                             Label1.Text = "提示:文件“" + fileName + "”成功上传,并生成“" + fileName_s + "”缩略图,文件类型为:" + FileUpload1.PostedFile.ContentType + ",文件大小为:" + FileUpload1.PostedFile.ContentLength + "B";                        }                        catch (Exception ex)                        {                            Label1.Text = "提示:文件上传失败,失败原因:" + ex.Message;                        }                    }                    else                    {                        Label1.Text = "提示:文件已经存在,请重命名后上传";                    }                }                else                {                    Label1.Text = "提示:文件类型不符";                }                            }        }         public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)        {            System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);            int towidth = width;            int toheight = height;            int x = 0;            int y = 0;            int ow = originalImage.Width;            int oh = originalImage.Height;            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();            }        }
  相关解决方案