【工具类】——图片缩放
在java中对于图片的处理一般都是使用Graphics2D类来实现。
Graphics2D 是 Java 2D API 的核心类,用于在 Java 平台上渲染二维形状、文本和图像。它是 Graphics 类的扩展,提供了更复杂的图形操作功能,包括几何变换、颜色管理、文本布局等。
用来实现图片的指定尺寸缩放
工具类代码
public class ImageResizer {
public static byte[] imageResizer(byte[] imageBytes, int width, int height) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(imageBytes);
BufferedImage originalImage = ImageIO.read(bais);
// 创建缩放后的图像
BufferedImage resizedImage = new BufferedImage(width, height, originalImage.getType());
Graphics2D graphics = resizedImage.createGraphics();
// 改善图像质量
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
// 设置透明度,保持原始图像的透明度
graphics.setComposite(AlphaComposite.Src);
// 绘制图像
graphics.drawImage(originalImage, 0, 0, width, height, null);
graphics.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(resizedImage, "png", baos);
return baos.toByteArray();
} catch (Exception e) {
return null;
}
}
}
测试类
public static void main(String[] args) {
// 指定原始图像文件路径和目标尺寸
String inputImagePath = "/Users/qweasdzxc/Downloads/test0.jpeg"; // 替换为实际路径
int targetWidth = 100; // 目标宽度
int targetHeight = 100; // 目标高度
// 读取原始图像文件
try {
File inputFile = new File(inputImagePath);
BufferedImage originalImage = ImageIO.read(inputFile);
// 将原始图像转换为字节数组
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, "png", baos);
byte[] imageBytes = baos.toByteArray();
// 调整图像大小
byte[] resizedImageBytes = imageResizer(imageBytes, targetWidth, targetHeight);
// 将调整大小后的图像保存到新文件
if (resizedImageBytes != null) {
ByteArrayInputStream bais = new ByteArrayInputStream(resizedImageBytes);
BufferedImage resizedImage = ImageIO.read(bais);
ImageIO.write(resizedImage, "png", new File("/Users/qweasdzxc/Downloads/test1.jpeg")); // 替换为实际路径
System.out.println("Image resized successfully.");
} else {
System.out.println("Failed to resize image.");
}
} catch (IOException e) {
e.printStackTrace();
}
}