`

利用Base64实现图片和XML格式的相互转换

    博客分类:
  • java
阅读更多

 

 

 

package com;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class Test {
	public static void main(String[] args) {
		Test t = new Test();
		t.inputToXML();
		t.outToImage();
	}

	// 图片转换成XML
	public void inputToXML() {
		BASE64Encoder encoder = new BASE64Encoder();
		try {
			File f = new File("D:\\xml\\1.jpg");
			// System.out.println("5555");
			if (f.exists()) {

				FileInputStream fis = new FileInputStream(f);
				byte[] buffer = new byte[(int) f.length()];
				fis.read(buffer);
				String s_imageData = encoder.encode(buffer);
				Document doc = DocumentHelper.createDocument();
				Element root = doc.addElement("ImageList");
				Element imageID = root.addElement("imageID");
				Element imageInfo = root.addElement("imageInfo");
				Element imageSize = root.addElement("imageSize");
				Element imageData = root.addElement("imageData");
				imageID.addText("01");
				imageInfo.addText("图片1");
				imageSize.addText(String.valueOf(f.length()));
				imageData.addText(s_imageData);
				XMLWriter writer = new XMLWriter(new FileOutputStream("D:\\xml\\1.xml"));
				writer.write(doc);
				System.out.println("22");
				writer.flush();
				writer.close();
			} else {
				System.out.println("找不到要转换的图片文件!");
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	// XML转成图片
	public void outToImage() {
		File f = new File("D:\\xml\\1.xml");
		SAXReader reader = new SAXReader();
		try {
			Document doc = reader.read(f);
			byte[] aa = doc.asXML().getBytes() ;
			System.out.println(new String(aa,"UTF-8"));
			
			Element root = doc.getRootElement();
			Element image = (Element) root.selectSingleNode("imageData");
			String s_data = image.getText();
			BASE64Decoder decoder = new BASE64Decoder();
			byte[] data = decoder.decodeBuffer(s_data);
			
			FileOutputStream fos = new FileOutputStream("D:\\xml\\71198.jpg");
			fos.write(data);
			fos.flush();
			fos.close();
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

 

 

 

 

 

 

 

 

 

 

 

0
2
分享到:
评论

相关推荐

    Base64加密图片.rar

    关于"图片文本互相转换",这里可能是指将Base64编码的图片数据嵌入到文本格式中,比如XML或JSON,或者反过来从这些格式中提取Base64编码的图片。在XML或JSON中,Base64编码的字符串可以直接作为属性值或字符串节点...

    Base64Util、FileUtil、GsonUtils、HttpUtil

    Base64Util工具类提供了将二进制数据转换为Base64字符串和反向转换的方法。例如,你可以使用它来编码图片、证书或其他非ASCII字符的数据,以便在HTTP请求中安全地传输。Base64Util通常包含如`encodeToString`(将...

    ebms_dll_pbbase64加密解密_Base64.dll_Base64utf-8

    在“Base64.dll”这个文件中,可能包含了一套实现Base64编码和解码功能的函数库,方便开发者在C/C++等语言环境下进行相关操作。 接下来是“pb base64加解密”。这里的“pb”很可能指的是Protocol Buffers(简称...

    File2Base64.rar

    描述提到了".net5文件与base64编码相互转化",这暗示了项目可能包含两个主要功能:一是将文件转换为Base64字符串,二是将Base64字符串解码回原始文件。"选择文件以及文件夹"意味着该工具或代码库支持批量操作,用户...

    C#和Java关于RSA非对称加密互通类

    由于C#默认使用XML格式,而Java更倾向于PEM或Base64格式,我们需要将这些格式相互转换。这通常涉及到Base64解码、XML解析和字节数组操作。 描述中提到的`RSAHelp.cs` 文件可能包含了一个C#类,用于处理这些转换。这...

    svg转css,css转svg,svg与css互相转换并压缩

    SVG是一种基于XML的矢量图像格式,能够提供高质量、可缩放的图形,而CSS则用于定义网页的样式和布局。在某些情况下,开发者可能需要将SVG转换为CSS,或者反过来,以便更好地管理和优化资源。同时,为了提高性能和...

    Resource 转换为 Resx 小工具

    3. **转换数据**:对于非文本数据,如图像或图标,工具可能需要将它们编码为Base64字符串,以便在XML中表示。 4. **保存为.resx文件**:最后,将生成的XML结构写入新的.resx文件中,保留原有的命名空间和类名,以便...

    分布式遗传算法在智能组卷中的Web services实现.pdf

    在此研究中,使用Base64编码压缩可以减少数据传输量,从而提高SOAP(简单对象访问协议)的性能,SOAP是基于XML(可扩展标记语言)用于Web服务通信的一种协议。 仿真试验结果表明,利用分布式Web服务的组卷系统不仅...

    类型转换方法

    在Python中,`bytes()`和`str()`可以相互转换,而在Java中,`getBytes()`和`new String(byte[])`用于字节和字符串间的转换。 总的来说,类型转换是编程中不可或缺的部分,理解并熟练掌握各种类型的转换方法能够帮助...

    《Python Cookbook》第三版繁體中文

    5.17 将字节写入文本文件:处理字节和文本的互相转换。 5.18 将文件描述符包装成文件对象:将文件描述符包装成Python的文件对象。 5.19 创建临时文件和文件夹:生成临时文件和文件夹。 5.20 与串行端口的通信:进行...

    用web 服务编的进制转换器。

    本文将深入探讨如何利用Web服务技术来构建一个高效的进制转换器,支持二进制、八进制、十进制之间的相互转换。Web服务作为一种开放的标准,能够跨越平台界限,使得不同系统间的数据交互变得更加便捷。 【二进制、八...

    jdk10的源码src文件

    `java.xml.bind`模块是Java Architecture for XML Binding(JAXB)的一部分,它实现了将Java对象和XML数据之间的自动转换。在源码中,可以学习到如何利用JAXB进行数据绑定,提高数据序列化和反序列化的效率。 `java...

    NET软件工程师试题1.pdf

    13. XML和.NET:文档中提到了“XML”,这表示.NET框架提供对XML的全面支持,包括读写XML文件、使用LINQ to XML进行查询和转换等。 14. 数据库和SQL:文档提到了“SQL”,这表明.NET框架支持使用SQL语言与数据库进行...

    universal-converter

    1. 文件格式转换:Java中的`java.io`和`java.nio`包提供了对文件读写的支持,开发者可以利用这些API将不同格式的文件(如PDF、DOC、TXT等)相互转换。 2. 图像转换:Java的`javax.imageio`包允许开发者读取、写入和...

    vc++ 应用源码包_1

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    vc++ 应用源码包_2

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    vc++ 应用源码包_6

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    vc++ 应用源码包_5

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    vc++ 应用源码包_3

    详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法(例如base64加解密、哈希加解密以及其它的文件加解密),分静态库和动态库方法。 JSCalls_demo js调用的演示源码 树控件拖动 演示了在树控件中来回拖动...

    SpringMVC JSON数据交互及RESTful支持实现方法

    其中,MappingJackson2HttpMessageConverter是SpringMVC默认处理JSON格式请求和响应的实现类,利用Jackson库来读写JSON数据。开发者需要在项目中引入Jackson库的相关jar包: - jackson-annotations-2.8.8.jar:JSON...

Global site tag (gtag.js) - Google Analytics