Java Base64 解码图片
在 Java 中,你可以使用 java.util.Base64 类来解码 Base64 编码的图片数据,以下是完整的实现步骤:

使用 Java 8+ 的 Base64 类
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;
public class Base64ImageDecoder {
public static void main(String[] args) {
// 示例 Base64 编码的图片数据(这里用字符串代替实际数据)
String base64Image = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==";
// 解码并保存图片
decodeAndSaveImage(base64Image, "decoded_image.png");
}
public static void decodeAndSaveImage(String base64Image, String outputPath) {
try {
// 移除可能存在的前缀(如 "data:image/png;base64,")
String base64Data = base64Image.split(",")[1];
// 解码 Base64 数据
byte[] imageBytes = Base64.getDecoder().decode(base64Data);
// 写入文件
try (FileOutputStream outputStream = new FileOutputStream(outputPath)) {
outputStream.write(imageBytes);
}
System.out.println("图片已成功保存到: " + outputPath);
} catch (IOException e) {
System.err.println("解码或保存图片时出错: " + e.getMessage());
}
}
}
处理带前缀的 Base64 字符串
Base64 字符串带有前缀(如 data:image/png;base64,),需要先处理前缀:
public static String extractBase64Data(String base64Image) {
if (base64Image.contains(",")) {
return base64Image.split(",")[1];
}
return base64Image;
}
解码为 BufferedImage(内存中处理)
如果你需要在内存中处理图片而不立即保存到文件:
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
public BufferedImage decodeToBufferedImage(String base64Image) throws IOException {
String base64Data = extractBase64Data(base64Image);
byte[] imageBytes = Base64.getDecoder().decode(base64Data);
try (ByteArrayInputStream bis = new ByteArrayInputStream(imageBytes)) {
return ImageIO.read(bis);
}
}
注意事项
-
内存考虑:对于非常大的 Base64 图片数据,解码时可能会消耗大量内存。
-
异常处理:确保正确处理
IOException和IllegalArgumentException(当 Base64 数据无效时)。
(图片来源网络,侵删) -
图片格式:根据 Base64 数据对应的图片格式(PNG、JPEG 等)调整输出文件扩展名。
-
性能:对于高性能需求,可以考虑使用
java.util.Base64.Decoder的wrap方法包装输入流。 -
Android 开发:在 Android 中,可以使用
android.util.Base64替代 Java 标准库的 Base64 类。
方法提供了从 Base64 字符串解码图片并保存到文件或内存中的完整解决方案。
