Java Base64转图片

Java Base64转图片

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. 代码说明

  1. 将Base64编码字符串转换为字节数组:使用DatatypeConverter.parseBase64Binary方法将Base64编码字符串解析为字节数组。在示例代码中,我们将Base64编码字符串base64Image转换为字节数组imageBytes
  2. 创建BufferedImage对象:使用ImageIO.read方法从字节数组创建一个BufferedImage对象。这里我们使用ByteArrayInputStream来读取字节数组。
  3. 将图片写入文件:使用ImageIO.write方法将BufferedImage对象写入文件中。在示例代码中,我们将BufferedImage对象写入名称为image.png的PNG文件中。
  4. 错误处理:使用异常处理机制try-catch来处理可能发生的IOException。如果创建图片时发生了错误,将会输出错误信息,并打印异常栈轨迹。

1.4. 运行结果

示例代码会在运行后生成一个名为image.png的图片文件,图片文件内容即为将Base64编码转换而来的图片内容。

2. 图片转Base64编码

2.1. 简介

在Java中,我们可以使用javax.imageio.ImageIO类提供的方法read将图片文件读取为BufferedImage对象。然后,我们可以使用javax.xml.bind.DatatypeConverter类提供的方法printBase64BinaryBufferedImage对象转换为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. 代码说明

  1. 读取图片文件为BufferedImage对象:使用ImageIO.read方法从图片文件创建一个BufferedImage对象。在示例代码中,我们使用ImageIO.read(new File("image.png"))将名为image.png的图片文件读取为BufferedImage对象bufferedImage
  2. BufferedImage对象转换为字节数组:我们使用ByteArrayOutputStream来临时存储将图片写出的字节数组。首先,我们创建一个ByteArrayOutputStream对象outputStream,然后使用ImageIO.write方法将BufferedImage对象写入到outputStream中。
  3. 将字节数组转换为Base64编码字符串:使用DatatypeConverter.printBase64Binary方法将字节数组转换为Base64编码字符串。在示例代码中,我们将字节数组imageBytes转换为Base64编码字符串base64Image
  4. 输出Base64编码结果:打印出转换后的Base64编码字符串。

2.4. 运行结果

示例代码会读取名为image.png的图片文件,并将其转换为一个Base64编码字符串。运行代码后,控制台会输出转换后的Base64编码字符串。

结论

本文详细介绍了如何使用Java将Base64编码转换为图片,以及如何将图片转换为Base64编码。通过使用javax.xml.bind.DatatypeConverter类和java.awt.image.BufferedImage类,我们可以轻松地在Java中进行这些转换操作。这些转换对于在网络传输图片或者将图片存储在数据库中等场景非常有用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程