Java - XML中的图像编码

Hoo*_*pla 10 java xml encoding image

我以为我会相对容易地找到解决这个问题的方法,但是在这里我要求你们众神的帮助让我摆脱这个难题.

所以,我有一个图像,我想用Java将它存储在XML文档中.我以前通过将图像保存到流中,将流转换为数组,然后VB的xml类能够将数组编码为base64字符串,在VisualBasic中实现了这一点.但是,经过几个小时的网络搜索以获得Java中的等效解决方案后,我空手而归.我唯一的成功是:

import it.sauronsoftware.base64.*;
import java.awt.image.BufferedImage;
import org.w3c.dom.*;

...

      BufferedImage img;
      Element node;

      ...

      java.io.ByteArrayOutputStream os = new java.io.ByteArrayOutputStream();

      ImageIO.write(img, "png", os);

      byte[] array = Base64.encode(os.toByteArray());

      String ss = arrayToString(array, ",");

      node.setTextContent(ss);

      ...

  private static String arrayToString(byte[] a, String separator) {
    StringBuffer result = new StringBuffer();
    if (a.length > 0) {
        result.append(a[0]);
        for (int i=1; i<a.length; i++) {
            result.append(separator);
            result.append(a[i]);
        }
    }
    return result.toString();
  }
Run Code Online (Sandbox Code Playgroud)

我想这是可以的,但是当我加载XML文件时,将其转换回图像的过程已被证明是不可能的.如果有人有更好的方法对XML文件中的图像进行编码/解码,请向前迈进,即使它只是指向其他线程的链接也没关系.

提前干杯,

喧闹.

Joã*_*lva 20

我做过类似的事情(Base64中的编码和解码),它就像一个魅力.以下是我认为您应该使用Base64Apache Commons项目中的类:

 //  ENCODING
 BufferedImage img = ImageIO.read(new File("image.png"));    
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 ImageIO.write(img, "png", baos);    
 baos.flush();
 String encodedImage = Base64.encodeToString(baos.toByteArray());
 baos.close(); // should be inside a finally block
 node.setTextContent(encodedImage); // store it inside node

 // DECODING
 String encodedImage = node.getTextContent();
 byte[] bytes = Base64.decode(encodedImage);
 BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


Eri*_*son 8

Apache Commons有一个Base64类,应该对你有所帮助:

从那里,你可以写出字节(它们已经是可读的格式)