Java读取图片和EXIF信息

本文介绍了一种处理客户端上传的图片时,如何正确获取图片的实际尺寸的方法。针对图片可能因拍摄角度导致的尺寸信息不准确问题,文章提供了读取图片EXIF信息并根据翻转角度调整宽度和高度的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后台需要读取客户端上传的图片,记录图片长宽,客户端以后就可以根据记录的长宽,展示图片。

正常的图片,读取很简单,代码如下:

BufferedImage originalImg = ImageIO.read(file.getInputStream()); 
int originalwidth = originalImg.getWidth();  //上传图片的宽
int originalheight = originalImg.getHeight();  //上传图片的高

但是,有一种情况,客户端拍摄的照片,有可能带方向翻转的,宽大于高的,而是高大于宽。而无论是上面的代码还是直接在windows查看图片,也是得到宽大于高的信息.

用上面直接读宽和高的代码,得到4128X2322,这个数值没有考虑图片翻转方向,所以是有误的。正确的做法,是读取图片的EXIF信息,根据其翻转的角度,确定宽和高。

Metadata metadata = JpegMetadataReader.readMetadata(file);
Directory directory = metadata.getDirectory(ExifDirectory.class);
if(directory.containsTag(ExifDirectory.TAG_ORIENTATION)){ // Exif信息中有保存方向,把信息复制到缩略图
  int orientation = directory.getInt(ExifDirectory.TAG_ORIENTATION); // 原图片的方向信息
   if(6 == orientation || 8 == orientation){//翻转了90°和270°的,长宽对调
     int originalwidth = originalImg.getHeight();//上传图片的宽
    int originalheight = originalImg.getWidth(); //上传图片的高
  } 
}

 

转载于:https://www.cnblogs.com/xianxh/p/4345111.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值