`

图片文件序列化之后通过XML传输

    博客分类:
  • xml
阅读更多
序列化

                    Bitmap bitMap = new Bitmap(filename);
                    MemoryStream ms = new MemoryStream();
                    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

                    StringWriter sw = new StringWriter();
                    XmlTextWriter xw = new XmlTextWriter(sw);
                    xw.Formatting = Formatting.Indented;
                    XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());
                    ser.Serialize(xw, ms.GetBuffer());
                    string xmlString = sw.GetStringBuilder().ToString();
                    xw.Close();
                    sw.Close();
                    ms.Close();

                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(xmlString);
                    if (doc != null && doc.ChildNodes.Count > 1 && doc.ChildNodes[1] != null)
                    {
                        XmlNode node = doc.ChildNodes[1];
                        photoString = node.InnerText;
                    }

photoString 就是序列化之后的信息

反序列化

                    StringBuilder sb = new StringBuilder();
                    sb.Append("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<base64Binary>");
                    sb.Append(photoString);
                    sb.Append("</base64Binary>");

                    XmlTextReader xrw = new XmlTextReader(new StringReader(sb.ToString()));
                    MemoryStream ms = new MemoryStream();
                    XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());
                    Bitmap bitMap = new Bitmap(new MemoryStream((byte[])ser.Deserialize(xrw)));
                    //bitMap.Save(filePath);
                    ms.Close();
                    xrw.Close();

对于其他文件序列化

                    FileStream stream = new FileInfo(value).OpenRead();
                    byte[] buffer = new byte[stream.Length];
                    stream.Read(buffer, 0, Convert.ToInt32(stream.Length));
                  

                    StringWriter sw = new StringWriter();
                    XmlTextWriter xw = new XmlTextWriter(sw);
                    xw.Formatting = Formatting.Indented;
                    XmlSerializer ser = new XmlSerializer(buffer.GetType());                   
                    ser.Serialize(xw, buffer);
                    string xmlString = sw.GetStringBuilder().ToString();
                    xw.Close();
                    sw.Close();                  
                    stream.Close();

                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(xmlString);
                    if (doc != null && doc.ChildNodes.Count > 1 && doc.ChildNodes[1] != null)
                    {
                        XmlNode node = doc.ChildNodes[1];
                        fileString = node.InnerText;
                    }

反序列化

                StringBuilder sb = new StringBuilder();
                sb.Append("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<base64Binary>");
                sb.Append(fileString);
                sb.Append("</base64Binary>");

                XmlTextReader xrw = new XmlTextReader(new StringReader(sb.ToString()));
                MemoryStream ms = new MemoryStream();
                XmlSerializer ser = new XmlSerializer(ms.GetBuffer().GetType());

                MemoryStream ms1 = new MemoryStream((byte[])ser.Deserialize(xrw));
                FileStream fs = new FileStream("c:\\a." + fileEx, FileMode.CreateNew);
                ms1.WriteTo(fs);               
                fs.Close();
                ms1.Close();
                ms.Close();
                xrw.Close();

-------------------------------------

#region 保存  图像信息
            XmlElement Images = doc.CreateElement("Images");
            XmlAttribute imgcount = doc.CreateAttribute("Count");
            imgcount.InnerText = imgFileName.Length.ToString();
            Images.Attributes.Append(imgcount);      

            for (int i = 0; i < imgFileName.Length; i++)
            {
                XmlElement img = doc.CreateElement("image");
                System.IO.FileInfo fi = new System.IO.FileInfo(imgFileName[i]);
                int size = (int)fi.Length;
                string type = fi.Name.Substring(fi.Name.LastIndexOf("."));
                string strname = fi.Name;
                // XmlElement elem = myXmlDoc.CreateElement(strname);
                // 打开图片文件,利用该图片构造一个文件流
                FileStream fs = new FileStream(imgFileName[i], FileMode.Open);
                // 使用文件流构造一个二进制读取器将基元数据读作二进制值
                BinaryReader br = new BinaryReader(fs);
                byte[] imageBuffer = new byte[br.BaseStream.Length];
                br.Read(imageBuffer, 0, Convert.ToInt32(br.BaseStream.Length));
                string textString = System.Convert.ToBase64String(imageBuffer);
                fs.Close();
                br.Close();
                img.InnerText = textString;

                XmlAttribute ImgAttributesName = doc.CreateAttribute("Name");
                ImgAttributesName.InnerText = strname.ToLower().ToString().Substring(0,strname.ToString().Length - 4);
                XmlAttribute ImgAttributesSize = doc.CreateAttribute("Size");
                ImgAttributesSize.InnerText = size.ToString();
                XmlAttribute ImgAttributesType = doc.CreateAttribute("Type");
                ImgAttributesType.InnerText = strname.ToLower().ToString().Substring(strname.ToString().Length - 3);

                img.Attributes.Append(ImgAttributesSize);
                img.Attributes.Append(ImgAttributesName);
                img.Attributes.Append(ImgAttributesType);

                Images.AppendChild(img);
            }
            EMRRepInfo.AppendChild(Images);

            #endregion

--------------------------------------------------

以下代码来自:http://blog.csdn.net/marquess/archive/2008/07/29/2732629.aspx

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;

namespace base64_img
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //图片 转为    base64编码的文本
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Title = "选择要转换的图片";
            dlg.Filter = "Image files (*.jpg;*.bmp;*.gif)|*.jpg*.jpeg;*.gif;*.bmp|AllFiles (*.*)|*.*";
            if (DialogResult.OK == dlg.ShowDialog())
            {
                ImgToBase64String(dlg.FileName);
            }
        }
        //图片 转为    base64编码的文本
        private void ImgToBase64String(string Imagefilename)
        {
            try
            {
                Bitmap bmp = new Bitmap(Imagefilename);
                this.pictureBox1.Image = bmp;
                FileStream fs = new FileStream(Imagefilename + ".txt", FileMode.Create);
                StreamWriter sw = new StreamWriter(fs);

                MemoryStream ms = new MemoryStream();
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length);
                ms.Close();
                String strbaser64 = Convert.ToBase64String(arr);
                sw.Write(strbaser64);

                sw.Close();
                fs.Close();
                MessageBox.Show("转换成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("ImgToBase64String 转换失败\nException:" + ex.Message);
            }
        }

        //base64编码的文本 转为    图片
        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Title = "选择要转换的base64编码的文本";
            dlg.Filter = "txt files|*.txt";
            if (DialogResult.OK == dlg.ShowDialog())
            {
                Base64StringToImage(dlg.FileName);
            }
        }
        //base64编码的文本 转为    图片
        private void Base64StringToImage(string txtFileName)
        {
            try
            {
                FileStream ifs = new FileStream(txtFileName, FileMode.Open, FileAccess.Read);
                StreamReader sr = new StreamReader(ifs);

                String inputStr = sr.ReadToEnd();
                byte[] arr = Convert.FromBase64String(inputStr);
                MemoryStream ms = new MemoryStream(arr);
                Bitmap bmp = new Bitmap(ms);

                bmp.Save(txtFileName + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                //bmp.Save(txtFileName + ".bmp", ImageFormat.Bmp);
                //bmp.Save(txtFileName + ".gif", ImageFormat.Gif);
                //bmp.Save(txtFileName + ".png", ImageFormat.Png);
                ms.Close();
                sr.Close();
                ifs.Close();
                this.pictureBox1.Image = bmp;
                MessageBox.Show("转换成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Base64StringToImage 转换失败\nException:"+ex.Message);
            }
        }
    }
}



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/heyu1000/archive/2009/09/09/4534268.aspx
分享到:
评论

相关推荐

    XML文件序列化与反序列化

    XML文件序列化是指将程序中的对象转换为XML格式的字符串或文件的过程。这个过程通常发生在我们需要将内存中的数据持久化到磁盘上,或者准备通过网络发送数据时。序列化有助于将复杂的对象结构转化为简单的文本格式,...

    C#序列化与反序列化(包括复杂xml对象)

    本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反...

    XML序列化与反序列化 实战

    当你有一个对象实例,想要将其保存到XML文件或通过网络发送时,XML序列化就非常有用。 在`CustomXmlSerializer.cs`这个文件中,很可能包含了一个自定义的序列化器类,它扩展了标准的XmlSerializer类,提供了更高级...

    JAVA对象序列化保存为XML文件的工具类

    【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...

    C# 实现序列化,反序列化XML文件 各种类型 万能

    在C#编程中,序列化和反序列化是将对象的状态转换为可存储或传输的形式,然后恢复为原始对象的过程。XML(eXtensible Markup Language)是一种结构化的数据格式,常用于数据交换和持久化。本文将详细介绍如何在C#中...

    序列化方式XML文件读写

    序列化XML文件的基本步骤如下: 1. 定义一个需要序列化的类,为类的属性添加特性如[XmlElement],[XmlAttribute]等,以控制XML元素和属性的生成。 ```csharp [Serializable] public class Person { [XmlElement(...

    XML序列化与反序列化整理文档(12套)

    XML序列化是将对象的状态转换为XML格式的过程,这样可以将数据保存到文件或通过网络进行传输。反序列化则是将XML数据恢复为原始对象结构的过程。这两个操作在编程中非常常见,尤其是在需要跨平台或跨语言传递数据时...

    xml文件序列化

    XML文件序列化是将对象的状态转换为XML格式的过程,以便可以存储或在网络上传输。这一过程在编程中尤其重要,因为它允许数据持久化,即将内存中的对象转化为可以在稍后时间重新加载和使用的文件。XML因其结构清晰、...

    XmlDemoTranfer Xml序列化与反序列化

    Xml序列化与反序列化是.NET框架中一种重要的数据转换技术,主要应用于将对象的状态转换成XML格式的字符串,便于存储或传输,同时也能够将XML数据还原为对象。在C#编程中,这一功能通常通过System.Xml.Serialization...

    VB.NET XML和JSON序列化与反序列化

    在VB.NET编程环境中,XML和JSON序列化与反序列化是常见的数据处理技术,用于将对象转换为文本格式(XML或JSON),以便于存储、传输和解析。这两者都是轻量级的数据交换格式,广泛应用于Web服务和客户端应用程序之间...

    12xml序列化器

    在Android开发中,XML序列化是将对象转换为XML格式的过程,以便存储或通过网络传输。反之,XML反序列化则是将XML数据恢复为对象的过程。"12xml序列化器"可能是某个特定的库或者实现,旨在简化Android开发者在XML序列...

    wpf应用程序之xml序列化

    // 反序列化XML文件到对象 using (StreamReader reader = new StreamReader("person.xml")) { person = (Person)serializer.Deserialize(reader); } ``` **XML增删改查** 在XML文件中进行增删改查操作,我们通常...

    XML文件序列化读取按理

    XML文件序列化是C#编程中一个重要的概念,它涉及到数据的存储和恢复。XML(eXtensible Markup Language)是一种结构化的数据表示语言,常用于在不同的系统间交换数据或者持久化对象的状态。在C#中,XML序列化允许...

    C#中以PLCOpen为例子的XML序列化,反序列化的代码

    在.NET框架中,XML序列化和反序列化是将对象的状态转换为XML文档,以及将XML文档还原为等效对象的过程。这对于数据持久化、网络传输或者存储在XML格式的配置文件中非常有用。本例以C#语言为基础,结合PLCOpen标准,...

    c#操作xml和序列化

    在.NET框架中,C#是一种常用的...通过以上技术,你可以实现用户配置信息的序列化存储,例如,将用户设置保存为XML或JSON文件,然后在应用程序启动时加载这些设置。附带的源码可能展示了如何在实际项目中应用这些概念。

    序列化成xml文件所必须的jar包

    // 反序列化XML字符串回对象 Person deserializedPerson = (Person) xstream.fromXML(xml); System.out.println(deserializedPerson); } } class Person { private String firstName; private String ...

    C#中Font和Color的Xml序列化

    在本文中,我们将探讨如何通过自定义方式实现Font和Color在XML序列化中的应用。 首先,让我们了解什么是Font和Color。Font对象在C#中代表了文本的外观,包括字体名称、大小、样式(如粗体、斜体)等属性。而Color...

    文件流序列化

    在编程领域,序列化是一种将对象的状态转换为可存储或可传输的形式的过程。这通常涉及到将数据结构或对象转换成字节流,以便可以写入磁盘、存储在网络中或者通过网络发送。在Delphi中,序列化是通过TStream接口实现...

    对象序列化成XMLDemo

    3. **开始序列化**:调用`startDocument()`方法来初始化XML文档,通常会指定XML版本和编码(如"UTF-8")。 4. **定义元素**:使用`startTag()`方法开始一个XML元素。这个方法需要两个参数:命名空间(通常为空)和...

    android XML简单序列化

    5. **反序列化XML到Java对象**:将XML字符串转换回`Person`对象。 ```java try { Person deserializedPerson = mapper.readValue(xmlString, Person.class); Log.d("XMLDeserialization", "Name: " + ...

Global site tag (gtag.js) - Google Analytics