zoukankan      html  css  js  c++  java
  • 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;
        }

  • 相关阅读:
    LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
    LeetCode 216. 组合总和 III(Combination Sum III)
    LeetCode 179. 最大数(Largest Number)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)
    指针变量、普通变量、内存和地址的全面对比
    MiZ702学习笔记8——让MiZ702变身PC的方法
    你可能不知道的,定义,声明,初始化
    原创zynq文章整理(MiZ702教程+例程)
  • 原文地址:https://www.cnblogs.com/wpf123/p/2052887.html
Copyright © 2011-2022 走看看