Java 通过图片Base64编码获取图片的大小、高度、宽度、DPI信息

背景

       有些图片是三方通过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 信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值