zoukankan      html  css  js  c++  java
  • C# 2.0中的上传多个图片合并及存入数据库的示例(转)

    //fu_SelectImage(VS2005自带上传控件)
    byte[] FileByteArray = fu_SelectImage.FileBytes;//图象文件临时储存Byte数组
    Stream StreamObject = fu_SelectImage.FileContent;//建立数据流对像

    Response.Write("文件长度为:"+ FileLength + "文件名为:" + fu_SelectImage.FileName + "文件类型为:" + fu_SelectImage.GetType().Name); //用来自己看看的。

    //定义一个新的byte[]用来存放数据库中的图片byte[]
    byte[] FileByteOldArray = new byte[1];

    DataHandle dh = new DataHandle(); //这个是朋友写好的数据库操作类直接拿来用上了,主要是读取数据库指定字段内容。
    dh.TargetTableName = "ImageStore"; //存图片的数据表
    dh.DbConditionAdd("ImageID",5); //图片的ID(ID可以从网址参数处获得getimage.aspx?id=5)
    SqlDataReader rd = dh.ExecuteReader();
    if (rd.Read())
    {
    FileByteOldArray = (byte[])rd["ImageData"]; //从数据库取出图片的byte[],数据库此字段为Image类型
    }
    rd.Close();
    dh.Close();

    //将图像的字节数组放入内存流
    MemoryStream oldms = new MemoryStream(FileByteOldArray); //存放数据库的图片字节数组内存流
    MemoryStream newms = new MemoryStream(); //用来存放合并后的内存流

    //合并位图,这个部分是关键,从这里也可以演化左右合并之类的。当然图片的缩小也差不多思路
    Bitmap b1 = new Bitmap(oldms); //oldms老的存在数据库的内存流
    Bitmap b2 = new Bitmap(StreamObject); //StreamObject新上传的图片流
    Bitmap b = new Bitmap(b1.Width > b2.Width ? b1.Width : b2.Width, b1.Height + b2.Height+1); 
    Graphics g = Graphics.FromImage(b);
    g.DrawImage(b1,0,0);
    g.DrawImage(b2, 0, b1.Height+1);//上下合并,把新图片放到老图片的下面,这个1主要是为了有1px的间隔,也可以去的。

    //把合并后的位图保存到内存流中
    b.Save(newms, ImageFormat.Jpeg);

    //从合并后图片的内存流中取得存放数据库所需的相关参数
    byte[] FileByteNewArray = newms.GetBuffer();
    FileLength = FileByteNewArray.Length;

    //释放资源
    oldms.Dispose();
    newms.Dispose();
    b1.Dispose();
    b2.Dispose();
    b.Dispose();
    g.Dispose();

    //建立SQL Server链接
    SqlConnection Con = new SqlConnection("Data Source=Localhost;Initial Catalog=MapPointManageDemo;User ID=sa;Pwd=sa;");
    //String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType,ImageDescription, ImageSize) valueS (@Image, @ContentType,@ImageDescription, @ImageSize)";
    String SqlCmd = "UPDATE ImageStore SET ImageData = @Image, ImageSize = ImageSize + @ImageSize WHERE ImageID = 5";
    SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
    CmdObj.Parameters.Add("@Image", SqlDbType.Binary, FileLength).Value = FileByteNewArray;//保存图片byte[]
    //CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar, 50).Value = "image/jpeg"; //记录文件类型
    //CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar, 200).Value = txtDescription.Text;//把其它单表数据记录上传
    CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt, 8).Value = FileLength;//记录文件长度,读取时使用
    Con.Open();
    CmdObj.ExecuteNonQuery();
    Con.Close();

    -----------
    此示例是他人尝试的成果,不一定是最科学的做法,但可以作为参考

  • 相关阅读:
    C#进阶-Linq-join
    C#进阶-Linq
    C#-string-stringBuilder
    C#-继承-多态
    Spring基础
    JQuery基本操作
    Oracle数据库基础操作
    AJAX前端后端
    AJAX异步提交(前端)
    js基本操作
  • 原文地址:https://www.cnblogs.com/qingyun163/p/2365480.html
Copyright © 2011-2022 走看看