日期:2014-05-18  浏览次数:20487 次

上传图片如何在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