• C#中图片转二进制到存储数据库


    图片的常见存储与读取凡是有以下几种:
    存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].
    1.参数是图片路径:返回Byte[]类型: public byte[] GetPictureData(string imagepath)
    {
    /**/////根据图片文件的路径使用文件流打开,并保存为byte[] 
    FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 
    byte[] byData = new byte[fs.Length];
    fs.Read(byData, 0, byData.Length);
    fs.Close();
    return byData;
    }2.参数类型是Image对象,返回Byte[]类型: public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
    {
    //将Image转换成流数据,并保存为byte[] 
    MemoryStream mstream = new MemoryStream();
    imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
    byte[] byData = new Byte[mstream.Length];
    mstream.Position = 0;
    mstream.Read(byData, 0, byData.Length);
    mstream.Close();
    return byData;
    }好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库中去就实现了把图片的二进制格式保存到数据库中去了。下面我就谈谈如何把数据库中的图片读取出来,实际上这是一个相反的过程。
    读取图片:把相应的字段转换成Byte[]即:Byte[] bt=(Byte[])XXXX
    1.参数是Byte[]类型,返回值是Image对象: public System.Drawing.Image ReturnPhoto(byte[] streamByte)
    {
    System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
    return img;
    }2.参数是Byte[] 类型,没有返回值,这是针对asp.net中把图片从输出到网页上(Response.BinaryWrite)
    public void WritePhoto(byte[] streamByte)
    {
    // Response.ContentType 的默认值为默认值为“text/html”
    Response.ContentType = "image/GIF";
    //图片输出的类型有: image/GIF image/JPEG
    Response.BinaryWrite(streamByte);
    }补充:
    针对Response.ContentType的值,除了针对图片的类型外,还有其他的类型: Response.ContentType = "application/msword";
    Response.ContentType = "application/x-shockwave-flash";
    Response.ContentType = "application/vnd.ms-excel";另外可以针对不同的格式,用不同的输出类型以适合不同的类型: switch (dataread("document_type"))
    {
    case "doc":
    Response.ContentType = "application/msword";
    case "swf":
    Response.ContentType = "application/x-shockwave-flash";
    case "xls":
    Response.ContentType = "application/vnd.ms-excel";
    case "gif":
    Response.ContentType = "image/gif";
    case "Jpg":
    Response.ContentType = "image/jpeg";
    }

    ========================================================================================================

     

    二进制文件转换部分:

       string strpath;
        protected void Page_Load(object sender, EventArgs e)
        {
            strpath = HttpContext.Current.Request.PhysicalApplicationPath + "1.bmp";
        }
        public byte[] getBytes(string filePath)  //图片转成二进制
        {
            System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
            byte[] imgData = new byte[fs.Length];
            fs.Read(imgData, 0, (int)fs.Length);
            return imgData;
        }

        private System.Drawing.Image convertByteToImg(byte[] imgData)  //二进制转成图片
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream(imgData);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            return img;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {

            //下面两行可将图片直接显示
            //System.Drawing.Image img = convertByteToImg(getBytes(strpath));
            //img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

            //下面几行代码将图片显示在IMAGE中
            byte[] photo = getBytes(strpath);
            //图片路径
            string strPath = "2.JPG";
            string strPhotoPath = Server.MapPath(strPath);
            //保存图片文件
            BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate));
            bw.Write(photo);
            bw.Close();
            //显示图片
            this.Image1.ImageUrl = strPath;
        }

  • 相关阅读:
    TensorFlow 使用预训练好的卷积神经网络和循环神经网络(lstm)模型处理图片转文字(im2txt)
    45度做人,90度做事,180度为人,360度处事
    SQL Server 和 Oracle 数据类型对应关系
    SQL Server 创建数据库
    SQL Server 2012 忘记sa用户处理方法
    剑指offer50:数组中重复的数字
    剑指offer49:把字符串转换成整数
    剑指offer48:不用加减乘除做加法
    剑指offer47:位运算+递归。求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
    剑指offer46:圆圈中最后剩下的数字(链表,递归)
  • 原文地址:https://www.cnblogs.com/zhangtao/p/2018635.html
Copyright © 2020-2023  润新知