java如何保存图片
保存图片到本地文件
使用ImageIO.write()方法将BufferedImage对象保存为图片文件。支持常见格式如JPEG、PNG等。
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
BufferedImage image = ...; // 获取或创建的图像对象
File outputFile = new File("output.jpg");
ImageIO.write(image, "jpg", outputFile);
从URL下载并保存图片
通过URL获取图片流,使用ImageIO.read()读取后保存。
import java.net.URL;
URL imageUrl = new URL("http://example.com/image.jpg");
BufferedImage image = ImageIO.read(imageUrl);
ImageIO.write(image, "png", new File("downloaded.png"));
使用Base64编码保存为字符串
将图片转换为字节数组后编码为Base64字符串,适用于需要文本存储的场景。
import java.util.Base64;
import java.io.ByteArrayOutputStream;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
String base64String = Base64.getEncoder().encodeToString(baos.toByteArray());
保存图片到数据库
将图片转为字节数组后,通过JDBC存入数据库BLOB字段。
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO images (name, data) VALUES (?, ?)");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
pstmt.setString(1, "sample.png");
pstmt.setBytes(2, baos.toByteArray());
pstmt.executeUpdate();
处理透明背景的PNG保存
需指定输出格式为PNG以保留透明度,JPEG格式不支持透明通道。
BufferedImage transparentImage = ...; // 带有透明通道的图像
ImageIO.write(transparentImage, "png", new File("transparent.png"));
控制JPEG压缩质量
通过JPEGImageWriteParam设置压缩质量参数(0-1范围)。

import javax.imageio.IIOImage;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.75f); // 75%质量
try (ImageOutputStream ios = ImageIO.createImageOutputStream(new File("compressed.jpg"))) {
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null), param);
}






