Java Base64转图片
介绍
在Java开发中,我们经常会遇到需要将图片转换为Base64编码或者将Base64编码转换为图片的情况。Base64编码是一种用64个不同的字符表示二进制数据的方法,它可以将二进制数据直接存储或传输到文本字符串中,非常方便。本文将详细介绍如何使用Java将Base64编码转换为图片。
1. Base64编码转图片
1.1. 简介
在Java中,我们可以使用javax.xml.bind.DatatypeConverter
类提供的方法printBase64Binary
将Base64编码字符串转换为字节数组。然后,我们可以使用java.awt.image.BufferedImage
类来创建图片,并将字节数组写入图片中。
1.2. 示例代码
下面是一个简单的示例代码,演示了如何将Base64编码转换为图片:
import javax.xml.bind.DatatypeConverter;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Base64ToImage {
public static void main(String[] args) {
String base64Image = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAeFBMVEX//" +
"/6KF8/+qd8/8avf86tr8Ag/wIAg28Ug3EYgHEZgXodhHsehh4fih8gixkgixohC1tjilu" +
"jmqu0B2ufn9xgoAAAgElEQVR42tWVS5MaiRyGv27Nqu1vLuzOyfPmm/ujbzj7n9TqX9Vd" +
"lXK/BXLwsRAREQBERABERABERABERABERABERABERABERABERABERABERABERABERAB" +
"ERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB" +
"ERABERABERABERABERABERABERABERABteo+yPlrUJuNZbi7yyK5fum4cRIopTbJF" +
"ZjZ/p+vWLTkKGeWb3RRsaQzl9WKZVlJxKptIhCFatMnUMpnUZFaW4NrFoaF6rCHMF" +
"8m59BmjSCV566gWO2LPAGDITmcw2ICl7E+iOEQhNEIsCMk6fkhFzQS0hBmMRqZdJ" +
"cOfxgkakwAr39UZQRMSc0dIySIklM0VAUUmj6QpZEE2GAwAyVeHV/reB02EKHoA1" +
"TOBEXMOSDNZ8+MIXUBjAqSQjaAqCsiQ4Hk41TqKyoAzp1u+XETNvAhSq0siTbha" +
"sb2i9EsLGRqMDAmCJWjW2PZWzFnieLiJjv3iSLYR0r2b27CNTrVCkmJ/9COFmSC" +
"fLBCl8SISCdjgss9OidOnAbP9lDbdhI5ZgwoTjxJeiY7T9UBLmn10B1jIQgoTFz" +
"mDgJKYGtZmBQel46BCGWhESHAC1cbt3b8j4mHmwGj1xJCtT7Ly/RfA7eFnEomrA" +
"Qs0SDKRBC4CpzvUJEc7kKAFFHkBwqSAmhLTr7+f4JWIQ3zn0lDeX1uGO9NikIB2" +
"LnXsKoMhG5LmI2uEhq1cI3o5ljQkboUKAx4MGWSSAGK0fBSPHqGRVSQblkDUmJ4" +
"A5/Isl/S5FjoC9d/iuCkZMuipiLgCxnoWt7cncqgwOUfNstAaUS2z0vCkp/òj2" +
"Uzo5EG8QVMiHi7DNtOfeMp0tNNC7ShkLWgWeXGSDJmpRPF11ggt1PFhqgVp5JrC" +
"MGLQzANqEQkEWCkQnUlYgAJCwHXI9J8YODpgtMeJUEQIbmosSqmXzShyGIyrHQ" +
"ivjmLJxP1eBCqMJ9kDmI9ZZsStGHpg6AnhEwX6McbQGRMjQs9ZBy42C7xERtRQ" +
"gwjNwu3el0ABFMZO14SnFGOQ3WfZh8L+uj4wzn83XWBKEm0Z91ljeJhJYa1Nvj" +
"Qlq0AJ+edtGFGYON50Lq2ZzJzSgaTDllQBaIdVEmJy9hsvSJgMsDAvGqlKs4s8" +
"mgiWUHOLIYf5pRStsNMX6kMxLjSDiNmBJGDMjuoRabWyMAKtbGVUq7osQ9vZfn" +
"FAlCvL2WOMLNqJF+x5aAYAT0SHvLaBQWSLcYQmzhcxtxQOJ4TBN5FYHbGYn9f" +
"pn8FVLgp/Ii0KiI3AAAAAElFTkSuQmCC";
byte[] imageBytes = DatatypeConverter.parseBase64Binary(base64Image);
try {
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(imageBytes));
File outputfile = new File("image.png");
ImageIO.write(bufferedImage, "png", outputfile);
System.out.println("Image created successfully.");
} catch (IOException e) {
System.out.println("Error occurred while creating image.");
e.printStackTrace();
}
}
}
1.3. 代码说明
- 将Base64编码字符串转换为字节数组:使用
DatatypeConverter.parseBase64Binary
方法将Base64编码字符串解析为字节数组。在示例代码中,我们将Base64编码字符串base64Image
转换为字节数组imageBytes
。 - 创建
BufferedImage
对象:使用ImageIO.read
方法从字节数组创建一个BufferedImage
对象。这里我们使用ByteArrayInputStream
来读取字节数组。 - 将图片写入文件:使用
ImageIO.write
方法将BufferedImage
对象写入文件中。在示例代码中,我们将BufferedImage
对象写入名称为image.png
的PNG文件中。 - 错误处理:使用异常处理机制
try-catch
来处理可能发生的IOException
。如果创建图片时发生了错误,将会输出错误信息,并打印异常栈轨迹。
1.4. 运行结果
示例代码会在运行后生成一个名为image.png
的图片文件,图片文件内容即为将Base64编码转换而来的图片内容。
2. 图片转Base64编码
2.1. 简介
在Java中,我们可以使用javax.imageio.ImageIO
类提供的方法read
将图片文件读取为BufferedImage
对象。然后,我们可以使用javax.xml.bind.DatatypeConverter
类提供的方法printBase64Binary
将BufferedImage
对象转换为Base64编码字符串。
2.2. 示例代码
下面是一个简单的示例代码,演示了如何将图片转换为Base64编码:
import javax.xml.bind.DatatypeConverter;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageToBase64 {
public static void main(String[] args) {
try {
BufferedImage bufferedImage = ImageIO.read(new File("image.png"));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", outputStream);
byte[] imageBytes = outputStream.toByteArray();
String base64Image = DatatypeConverter.printBase64Binary(imageBytes);
System.out.println("Base64 image: " + base64Image);
} catch (IOException e) {
System.out.println("Error occurred while reading image.");
e.printStackTrace();
}
}
}
2.3. 代码说明
- 读取图片文件为
BufferedImage
对象:使用ImageIO.read
方法从图片文件创建一个BufferedImage
对象。在示例代码中,我们使用ImageIO.read(new File("image.png"))
将名为image.png
的图片文件读取为BufferedImage
对象bufferedImage
。 - 将
BufferedImage
对象转换为字节数组:我们使用ByteArrayOutputStream
来临时存储将图片写出的字节数组。首先,我们创建一个ByteArrayOutputStream
对象outputStream
,然后使用ImageIO.write
方法将BufferedImage
对象写入到outputStream
中。 - 将字节数组转换为Base64编码字符串:使用
DatatypeConverter.printBase64Binary
方法将字节数组转换为Base64编码字符串。在示例代码中,我们将字节数组imageBytes
转换为Base64编码字符串base64Image
。 - 输出Base64编码结果:打印出转换后的Base64编码字符串。
2.4. 运行结果
示例代码会读取名为image.png
的图片文件,并将其转换为一个Base64编码字符串。运行代码后,控制台会输出转换后的Base64编码字符串。
结论
本文详细介绍了如何使用Java将Base64编码转换为图片,以及如何将图片转换为Base64编码。通过使用javax.xml.bind.DatatypeConverter
类和java.awt.image.BufferedImage
类,我们可以轻松地在Java中进行这些转换操作。这些转换对于在网络传输图片或者将图片存储在数据库中等场景非常有用。