Java实现将图片和Base64字符串之间的互转

将图片读取成base64字符串,将base64字符串存储为图片,是在Web开发中比较常见的操作。在Java中,我们可以使用Java的内置类库来完成这个操作,具体的实现方法如下:

一、将图片读取成base64字符串

我们可以使用Java的内置类库ImageIO来读取图片,并使用Base64类将图片转换为base64字符串。代码如下: 

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
import javax.imageio.ImageIO;

public class ImageToBase64 {

    public static String imageToBase64(File file) throws IOException {
        BufferedImage image = ImageIO.read(file);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", outputStream);
        byte[] bytes = outputStream.toByteArray();
        return Base64.getEncoder().encodeToString(bytes);
    }
}

我们首先通过ImageIO.read方法读取图片,然后通过ByteArrayOutputStream将图片写入到字节数组中。最后,我们使用Base64.getEncoder().encodeToString方法将字节数组转换为base64字符串。


二、将base64字符串存储为图片

我们可以使用Java的内置类库ImageIO来将base64字符串转换为图片,并将图片保存到指定的路径下。代码如下:

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
import javax.imageio.ImageIO;

public class Base64ToImage {

    public static void base64ToImage(String base64, String path) throws IOException {
        byte[] bytes = Base64.getDecoder().decode(base64);
        BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));
        File file = new File(path);
        ImageIO.write(image, "jpg", file);
    }
}

我们首先使用Base64.getDecoder().decode方法将base64字符串转换为字节数组,然后使用ImageIO.read方法将字节数组转换为BufferedImage对象。最后,我们使用ImageIO.write方法将BufferedImage对象保存为指定路径下的图片。

三、完整示例代码

下面是一个完整的示例代码,将图片读取成base64字符串,并将base64字符串转换为图片并保存到指定路径下:

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
import javax.imageio.ImageIO;

public class ImageUtils {

    /**
     * 将图片文件转换为Base64字符串
     *
     * @param file 图片文件
     * @return Base64字符串
     * @throws IOException
     */
    public static String imageToBase64(File file) throws IOException {
        BufferedImage image = ImageIO.read(file);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", outputStream);
        byte[] bytes = outputStream.toByteArray();
        return Base64.getEncoder().encodeToString(bytes);
    }

    /**
     * 将Base64字符串转换为图片文件
     *
     * @param base64 Base64字符串
     * @param path   图片保存路径
     * @throws IOException
     */
    public static void base64ToImage(String base64, String path) throws IOException {
        byte[] bytes = Base64.getDecoder().decode(base64);
		BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));
		File file = new File(path);
		ImageIO.write(image, "jpg", file);
		}

	/**
	 * 示例:将图片文件转换为Base64字符串,并将Base64字符串转换为图片文件
	 *
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		File file = new File("test.jpg");
		String base64 = imageToBase64(file);
		System.out.println("Base64字符串:" + base64);
		String path = "test_copy.jpg";
		base64ToImage(base64, path);
		System.out.println("图片保存路径:" + path);
	}
 }

在这个示例代码中,我们首先使用imageToBase64方法将test.jpg文件转换为base64字符串,并将转换后的字符串打印出来。然后,我们使用base64ToImage方法将base64字符串转换为图片,并将图片保存到指定路径下。最后,我们打印出图片保存的路径。

总结

通过使用Java的内置类库ImageIO和Base64,我们可以方便地将图片文件读取成base64字符串,并将base64字符串转换为图片文件。在实际开发中,我们可以使用这个方法来完成一些图片的处理任务,比如将图片上传到服务器等。