背景
有些图片是三方通过base64传到自己的系统,因为附件容量限制,需要对图片的一些信息做判断,下面是获取图片常用属性的方法
Base64转换流
String contentType = getSubUtilSimple(photo, "data:image/(.*?);base64,");
String certPhoto = photo.replace(String.format("data:image/%s;base64,", contentType), "");
byte[] decodeBuffer = Base64Util.decodeBuffer(certPhoto);
ByteArrayInputStream inputStream = new ByteArrayInputStream(decodeBuffer);
获取图片的大小
System.out.println("图片大小:" + decodeBuffer.length);
获取图片的高度和宽度
inputStream = new ByteArrayInputStream(decodeBuffer);
BufferedImage read = ImageIO.read(inputStream);
System.out.println("图片高度:" + read.getHeight());
System.out.println("图片宽度:" + read.getWidth());
获取图片的DPI
ByteArrayInputStream inputStream = new ByteArrayInputStream(decodeBuffer);
Metadata metadata = ImageMetadataReader.readMetadata(inputStream);
// 提取 DPI 信息
ExifIFD0Directory exifDirectory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
if (exifDirectory != null) {
Integer xDpi = exifDirectory.getInteger(ExifIFD0Directory.TAG_X_RESOLUTION);
Integer yDpi = exifDirectory.getInteger(ExifIFD0Directory.TAG_Y_RESOLUTION);
System.out.println("X DPI: " + (xDpi != null ? xDpi : "未知"));
System.out.println("Y DPI: " + (yDpi != null ? yDpi : "未知"));
}
else {
System.out.println("未找到 DPI 信息");
}
结果展示
注意点:
-
图片格式限制:
- 并不是所有图片格式都会包含 DPI 信息。
- JPEG 和 TIFF 格式通常支持存储 DPI 信息,但 PNG、GIF 等格式并不强制包含 DPI 信息。
-
图片生成方式:
- 如果图片是通过某些绘图工具或简单的截图工具生成的,可能不会嵌入 DPI 元数据。
- 在线压缩、转换工具有时会移除元数据信息以减少文件大小。
-
元数据被移除:
- 一些图片在传输或保存时会被优化,可能会丢失元数据,包括 DPI。
-
用户未设置 DPI:
- 如果创建图片时未明确设置 DPI,工具可能使用默认值或省略 DPI 信息。