关于dataList里面图片显示的问题
由于用户上传的图片太大且比较不确定,在列表面显示图片的时候如果固定了长宽,图片会出现变形的情况,故加了一个JS的函数来按比例缩小图片,但是用上之后有的图片受了限制,有的还是很大,好像不受JS的限制了。故我来取经
.aspx文件用来显示图片的<div class="pic">
    &nbsp;<asp:Image ID="imgurl" runat="server" ImageUrl='<%# Eval("imgurl") %>' />   
   </div>.cS文件用来控制图片大小的protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex]);
            Image ib = (Image)e.Item.FindControl("imgurl");
            Image bigimg = (Image)e.Item.FindControl("bigimg");
            ib.Attributes.Add("onload", "javascript:imgadapter(this,120,90)");
             string img = ib.ImageUrl;
            if (img != "")
            {
                ib.ImageUrl = "/business/" + img;
                ib.AlternateText = "产品图片(URL)" + img;
            }            else
            {
                ib.ImageUrl = "/img2007/nopic.jpg";
                ib.AlternateText = "无产品图片1";
            }            bigimg.ImageUrl = ib.ImageUrl;
        }
JS函数function imgadapter(obj,width,height)   
{   
  var max_height = height;  //设置最大高度   
  var max_width = width;   //设置最大宽度   
  var real_height = obj.height;   
  var real_width = obj.width;   
  if(obj.height>max_height)   
  {   
    obj.height = max_height;   
    obj.width = Math.round(obj.height*real_width/real_height);   
  }   
  if(obj.width>max_width)   
  {   
    obj.width = max_width;   
    obj.height = Math.round(obj.width*real_height/real_width);   
  }   
}还有什么其它办法可以实现吗?

解决方案 »

  1.   

    楼主,我把压箱底的千年珍藏都拿出来了,应该可以~=====================================================================================#region 图片压缩显示
        private void ImgFileShow(string path,Image Img) //path 为存储图片的路径,Img 为显示图片的控件ID
        {
            //压缩后图片的最大宽和高
            int wa = 90;
            int hb = 80;
            if (File.Exists(Server.MapPath(path)))
            {
                System.Drawing.Image imga = System.Drawing.Image.FromFile(Server.MapPath(path));
                if ((float)imga.Width / imga.Height >= (float)wa / hb)
                {
                    Img.Width = System.Web.UI.WebControls.Unit.Parse(wa.ToString());
                }
                else
                {
                    Img.Height = System.Web.UI.WebControls.Unit.Parse(hb.ToString());
                }
                Img.ImageUrl = path;
            }
    #endregion