我刚刚被告知要使用数据URI发送图像的缩略图。我一直在搜索它,但我发现它基本上是文件的文本表示形式,可以直接在HTML中使用。我真的找不到如何在Java中制作数据URI。我有文件的输入流。有人可以阐明这一点,并指出一种产生这种现象的方法吗?
最佳答案
例如。对于图像:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(image, "png", baos);
} catch (IOException e) {
e.printStackTrace();
}
String imageString = "data:image/png;base64," +
DatatypeConverter.printBase64Binary(baos.toByteArray());
例
运行下面的代码。如果FF是默认浏览器,您可能会看到类似以下内容的内容:
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.xml.bind.DatatypeConverter;
import javax.imageio.ImageIO;
import java.io.ByteArrayOutputStream;
import java.io.*;
public class DataUriConverter {
public static void main(String[] args) throws Exception {
int sz = 200;
BufferedImage image = new BufferedImage(
sz, sz, BufferedImage.TYPE_INT_ARGB);
// paint the image..
Graphics2D g = image.createGraphics();
g.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(Color.BLUE);
for (int ii = 0; ii < sz; ii += 5) {
g.drawOval(ii, ii, sz - ii, sz - ii);
}
g.dispose();
// convert the image
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
System.out.println("baos.toByteArray() " + baos.toByteArray());
System.out.println("baos.toByteArray().length " + baos.toByteArray().length);
String data = DatatypeConverter.printBase64Binary(baos.toByteArray());
String imageString = "data:image/png;base64," + data;
String html =
"<html><body><img src='" + imageString + "'></body></html>";
// write the HTML
File f = new File("image.html");
FileWriter fw = new FileWriter(f);
fw.write(html);
fw.flush();
fw.close();
// display the HTML
Desktop.getDesktop().open(f);
}
}