web项目img标签绝对路径不显示原因并和解决方法

最近做一个功能,根据数据库查询的地址(绝对路径)显示到页面上,后来发现什么写页面都显示不出来,上网找了很久基本都是说直接写地址或加file\的。后来才发现原来是游览器导致的,由于现在对于网络安全方法越来越看中,所以现在的游览器运行时都是不允许直接写绝对路径的 (除了低版本ie和本地运行HTML页面 外)。

理解到不能直接用绝对路径后我就重写整理思路
相对的解决方法有2个
1.把图片上传到web项目中 在显示图片时改为相对路径
2.把图片转换成Base64格式显示出来

由于需求原因,我选择了第2种方法。下面就是我的代码:

 protected string clickShowImg(object sender, EventArgs e)
 {
       string src= ""; //img 标签src值
       string path = "D:/图片/IMG_0899.JPG";
       if (File.Exists(path))
       {
            System.Net.WebRequest imgRequst = System.Net.WebRequest.Create(path);
            //获得图片
            System.Drawing.Image image = System.Drawing.Image.FromStream(imgRequst.GetResponse().GetResponseStream());
                
            Bitmap Bitmap = new Bitmap(image);
            //创建内存流 
            using (MemoryStream ms1 = new MemoryStream())
            {
                    Bitmap.Save(ms1, System.Drawing.Imaging.ImageFormat.Jpeg);
                    byte[] arr1 = new byte[ms1.Length];
                    ms1.Position = 0;
                    ms1.Read(arr1, 0, (int)ms1.Length);
                    ms1.Close();
                    UserPhoto  = "data:image/jpeg;base64,"+Convert.ToBase64String(arr1);
            }
       }
       return src;
 }

后来发现图片有点大,导致加载速度慢。我就加了一个调整图片尺寸的方法

 private static System.Drawing.Image resizeImage(System.Drawing.Image imgToResize, Size size)
 {
      //获取图片宽度
      int sourceWidth = imgToResize.Width;
      //获取图片高度
      int sourceHeight = imgToResize.Height;

      float nPercent = 0;
      float nPercentW = 0;
      float nPercentH = 0;
      //计算宽度的缩放比例
      nPercentW = ((float)size.Width / (float)sourceWidth);
      //计算高度的缩放比例
      nPercentH = ((float)size.Height / (float)sourceHeight);

      if (nPercentH < nPercentW)
          nPercent = nPercentH;
      else
          nPercent = nPercentW;
      //期望的宽度
      int destWidth = (int)(sourceWidth * nPercent);
      //期望的高度
      int destHeight = (int)(sourceHeight * nPercent);

      Bitmap b = new Bitmap(destWidth, destHeight);
      Graphics g = Graphics.FromImage((System.Drawing.Image)b);
      g.InterpolationMode = InterpolationMode.HighQualityBicubic;
      //绘制图像
      g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
      g.Dispose();
      imgToResize.Dispose();
      return (System.Drawing.Image)b;
}

调用这个方法 把原图片(image) 换成转换后的图片(i) 即可 。如果觉得页面加载还慢,可以用延迟加载,让页面更友好。

//new Size(宽, 高)
System.Drawing.Image i = resizeImage(image, new Size(270, 129));

 

你可能感兴趣的:(C#,学习笔记)