Java 图片 Base64 编码
在 Java 中,你可以使用 javax.imageio 和 java.util.Base64 类将图片转换为 Base64 编码字符串,以下是几种实现方法:

使用 ImageIO 和 Base64
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
public class ImageToBase64 {
public static String encodeImageToBase64(String imagePath, String formatName) throws IOException {
// 读取图片文件
File imageFile = new File(imagePath);
BufferedImage bufferedImage = ImageIO.read(imageFile);
// 创建字节数组输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 将图片写入输出流
ImageIO.write(bufferedImage, formatName, byteArrayOutputStream);
// 获取字节数组
byte[] imageBytes = byteArrayOutputStream.toByteArray();
// 进行Base64编码
return Base64.getEncoder().encodeToString(imageBytes);
}
public static void main(String[] args) {
try {
String base64String = encodeImageToBase64("path/to/your/image.jpg", "jpg");
System.out.println("Base64编码结果: " + base64String);
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理网络图片或InputStream
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Base64;
public class ImageToBase64FromUrl {
public static String encodeImageFromUrlToBase64(String imageUrl, String formatName) throws IOException {
// 从URL获取图片流
URL url = new URL(imageUrl);
InputStream inputStream = url.openStream();
// 读取图片
BufferedImage bufferedImage = ImageIO.read(inputStream);
// 创建字节数组输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 将图片写入输出流
ImageIO.write(bufferedImage, formatName, byteArrayOutputStream);
// 获取字节数组
byte[] imageBytes = byteArrayOutputStream.toByteArray();
// 进行Base64编码
return Base64.getEncoder().encodeToString(imageBytes);
}
public static void main(String[] args) {
try {
String base64String = encodeImageFromUrlToBase64(
"https://example.com/image.png", "png");
System.out.println("Base64编码结果: " + base64String);
} catch (IOException e) {
e.printStackTrace();
}
}
}
带MIME类型的完整Base64编码(用于HTML/CSS)
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Base64;
public class ImageToBase64WithMime {
public static String encodeImageWithMime(String imagePath, String formatName) throws IOException {
File imageFile = new File(imagePath);
BufferedImage bufferedImage = ImageIO.read(imageFile);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, formatName, byteArrayOutputStream);
byte[] imageBytes = byteArrayOutputStream.toByteArray();
// 获取MIME类型
String mimeType = "image/" + formatName.toLowerCase();
// 构建完整的Base64编码字符串
return "data:" + mimeType + ";base64," + Base64.getEncoder().encodeToString(imageBytes);
}
public static void main(String[] args) {
try {
String base64WithMime = encodeImageWithMime("path/to/your/image.gif", "gif");
System.out.println("带MIME的Base64编码: " + base64WithMime);
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
-
内存使用:大图片转换为Base64会占用较多内存,对于大图片考虑使用流式处理或分块处理。
-
性能:Base64编码会使数据大小增加约33%,传输时考虑压缩。
-
格式支持:确保Java支持你要处理的图片格式(JPEG、PNG、GIF等)。
-
异常处理:实际应用中应添加更完善的异常处理。
(图片来源网络,侵删) -
Java版本:
java.util.Base64是从Java 8开始引入的,如果你使用的是更早版本,需要使用第三方库如Apache Commons Codec。
如果你需要处理更复杂的场景或有其他需求,可以进一步扩展这些基础代码。
