Java读取图片和EXIF信息

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

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

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(); //上传图片的高
  }
}
时间: 2024-09-29 01:09:18

Java读取图片和EXIF信息的相关文章

EXIF.Js:读取图片的EXIF信息

首先,EXIF是什么? EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息,简单来说,Exif信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,需要注意的是EXIF信息是不支持png,webp等图片格式的.(建议自己试的时候,现拍一张,把地理位置信息开启,这样得到的是完整的EXIF信息) 在脚手架下的使用: npm install exif-js --s

GOEXIF读取和写入EXIF信息

能够读取和写入EXIF信息,使得图像处理程序在不改变原有图片内容.不添加多余文件的情况下可以保存参数信息,非常有价值. 这方面中英文资料比较少,经过较长时间的研究和集成,我在网络相关资料的基础上完成了GOEXIF,实现了MFC上的直接读取和写入. 读取 EXIFINFO m_exifinfo;FILE* hFile=fopen(FilePathName.c_str(),"rb");if (hFile){memset(&m_exifinfo,0,sizeof(EXIFINFO))

JAVA 读取计算机中相关信息

java读取 计算机 cup号 读取版本 显卡 ................. package com.swt.common.util; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.LineNumberReader; /** * 获取硬件信息 * @author luoxf * */

java读取图片的(尺寸、拍摄日期、标记)等EXIF信息

1.metadata-extractor是 处理图片EXIF信息的开源项目,最新代码及下载地址:https://github.com/drewnoakes/metadata-extractor 2.本demo工程的代码(包含所需的jar包)下载地址:http://files.cnblogs.com/files/haha12/readPic.rar 主要代码如下: package com.test; import java.io.File; import java.io.IOException;

php获取图片完整Exif信息类 获取图片详细完整信息类

首先解释一下什么是Exif.Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上,Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件以及相机品牌.型号.色彩编码.拍摄时录制的声音以及全球定位系统(GPS).缩略图等.简单地说,Exif=JPEG+拍摄参数.因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息. 开启PHP模块 默认情况下

利用php获取图片完整Exif信息类 获取图片详细完整信息类

这个是最近写的一个php获取图片Exif类,功能比较全面,也把所有的Exif都翻译了,执行效率也还可以. 唉,这次懒地写英文版了,以后有时间把英文版也做下.同样,不设置隐藏,也不需金钱. 因为这里不能贴链接,我博客里有个测试网页,大家如果有兴趣,可以去看看tonylevid.com 分两大模式:一个是已经转换数据的(如width:500px)用于显示:一个是未转换数据的如(width:500)用于用户自己自定义计算. 内置3种获取模式,用户可以自定义数组来获取. 注意:需在php.ini中开启m

java 读取图片色深

问题: 想写一个小程序可读取图片的色深(bit-depth).网上有一些软件可完成这个功能,但是我想把程序做成一个可移植的插件. 本想用c写的,但实在麻烦,最后选择java,与很多方法不用自己写,速度快. 最后打包成一个jar包,只要装了jdk就可以在控制台运行. 我用的是MYECLIPSE,步骤如下:1.创建一个工程: 2.创建一个java class: 3.程序包含两个类getinfo.java 和 methodclass.java: getinfo.java包含main()方法,代码如下:

获取图片的EXIF信息

对于专业的摄影师来说,Exif信息是很重要的信息,也包含了非常多的东西 1.EXIF EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照片而定制的元数据,可以记录数码照片的拍摄参数.缩略图及其他属性信息. Exif是一种图像文件格式,它的数据存储与JPEG格式是完全相同的.利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息. Exif 所记录的元数据信息非常丰富,主要包含了以下几

Java读取图片像素和大小

package com.aa.promotion.dao.generalize; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.channels.FileChannel; import javax.im