C#gridView显示缩略图以及屏蔽url

公司的大概需求:

由于某些需求,公司需要我们开发一个app和web,移动端的一部分功能是拍照然后上传图片到数据库并且分类 (原图存于服务器共享文件夹,数据库保留url),web端则需要将这些图片全部显示出来并且可以根据条件筛选。为了方便查看,所以gridView中需要有一栏显示缩略图,点开缩略图之后显示原图

     这一次是我做web端(C#)另外一个做android端,一开始我觉得很简单,结果写完之后测试才发现诸多问题:

  1.共享文件夹图片的url直接循环绑定到asp的Image控件中的ImageUrl中之后始终打不开图片。

  2.用window.open(url,"参1","参2")在浏览器显示原图(比较大)不能屏蔽url(这个貌似现在都不可以了,图片是从另外一个服务器上取的,并且不一定是一个文件夹中,所以数据库存的是完整url,没有用当前项目的相对地址)。

最后解决方案:

为了不显示url,最后给每张图片都加了一个imageID,然后再通过imageID来获取url,再读取url获取图片;为了解决共享文件夹图片显示问题,通过”曲线救国“另创一个新的aspx空白页面,再在后台将图片以二进制字节写入

部分代码如下:

 protected void grvCases_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        
      
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
           
            Label lable1 = e.Row.FindControl("lblRefImageID") as Label;
            string imageID = lable1.Text;
            HyperLink hlImage = e.Row.FindControl("hlImage") as HyperLink;
            Image tnImage = e.Row.FindControl("thumbnail") as Image;
            //thumbnail 
            tnImage.ImageUrl = @"showPic.aspx?imageID=" + imageID;               
            hlImage.NavigateUrl = "javascript:linkClick('" + @"showPicNormal.aspx?imageID=" + imageID + "');";
       
        }

    }

缩略图处理showPic.aspx后台代码:

ublic partial class showPic : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        String imageID = Request.QueryString["imageID"];
        //根据url的imageID取url
        DBFunction db=new DBFunction();
        ArrayList lst = new ArrayList();
        String sql = "select  a.FIlePath from Attachment a left join info b on a.CaseID=b.CaseID where b.ImageID=@imageID";
        String strconn = System.Configuration.ConfigurationManager.ConnectionStrings["MobileAppsConnectionString"].ToString();
        SqlParameter s1 = new SqlParameter("@imageID", SqlDbType.Char, 50);
        s1.Value = imageID;
        if (!string.IsNullOrEmpty(imageID))
        {
            lst.Add(s1);
        }
        String strUrl = db.getStrUrl(sql, lst, strconn);

  if (System.IO.File.Exists(strUrl)){
        System.Drawing.Image originalImage = System.Drawing.Image.FromFile(strUrl);
      
        if (originalImage == null)
        {
            return;
        }

     int width = 50;
        int height = 100;
        int towidth = 50;
        int toheight = 50;


        int x = 0;
        int y = 0;
        int ow = originalImage.Width;
        int oh = originalImage.Height;

    //预防以后改变
        switch ("Cut")
        {
            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.Bitmap bitmap = new System.Drawing.Bitmap(towidth, toheight);


        //新建一个画板 
        Graphics g = System.Drawing.Graphics.FromImage(bitmap);


        //设置高质量插值法 
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;


        //设置高质量,低速度呈现平滑程度 
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;


        //清空画布并以透明背景色填充 
        g.Clear(Color.Transparent);


        //在指定位置并且按指定大小绘制原图片的指定部分 
        g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
            new Rectangle(x, y, ow, oh),
            GraphicsUnit.Pixel);


        try
        {
        
            //以jpg格式保存缩略图 
            //bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            ms.Flush();
            byte[] bmpBytes = ms.ToArray();
            Response.BinaryWrite(bmpBytes);
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            originalImage.Dispose();
            bitmap.Dispose();
            g.Dispose();
        }
        // } 
    }
    }
}

显示原图:

showNormalPic.aspx代码

protected void Page_Load(object sender, EventArgs e)
    {
        //"根据照片路径,将照片转为二进制数组";


        String imageID = Request.QueryString["imageID"];
        //根据url的imageID取url
        DBFunction db = new DBFunction();
        ArrayList lst = new ArrayList();
        String sql = "select  a.FIlePath from Attachment a left join info b on a.CaseID=b.CaseID where b.ImageID=@imageID";
        String strconn = System.Configuration.ConfigurationManager.ConnectionStrings["MobileAppsConnectionString"].ToString();
        SqlParameter s1 = new SqlParameter("@imageID", SqlDbType.Char, 50);
        s1.Value = imageID;
        if (!string.IsNullOrEmpty(imageID))
        {
            lst.Add(s1);
        }
        String strUrl = db.getStrUrl(sql, lst, strconn);
        strUrl=strUrl.Replace(@"\", @"\\");
       // string strUrl = Request.QueryString["URL"];             
            if (System.IO.File.Exists(strUrl))
            {
            // 以二进制方式读文件  
            FileStream aFile = new FileStream(strUrl, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            // 创建一个二进制数据流读入器,和打开的文件关联  
            BinaryReader brMyfile = new BinaryReader(aFile);
            // 把文件指针重新定位到文件的开始  
            brMyfile.BaseStream.Seek(0, SeekOrigin.Begin);
            //获取照片的字节数组  
            byte[] photo = brMyfile.ReadBytes(Convert.ToInt32(aFile.Length.ToString()));
            // 关闭以上new的各个对象  
            brMyfile.Close();
            Response.ContentType = "image/jpg";//防止chrome打不开图片
            Response.BinaryWrite(photo);
        }
    }

js:

这个时候的url只是为了打开一个浏览器窗口,看不到真实的url,图片是写入到页面的
    function linkClick(url) {    
        win = window.open(url, 'image', 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=360,height=500,top=0,left=0');             
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值