Java读取图片和EXIF信息

摘要:
后台需要读取客户端上传的图像//上传图像的宽度intoriginalheight=originalImg。获取高度();无论是在Windows中直接查看上述代码还是图像,都会获得宽度大于高度的信息。使用上述代码,可以直接读取宽度和高度。该值不考虑图像翻转方向,而是读取图像的EXIF信息。

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

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

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

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

Java读取图片和EXIF信息第1张

用上面直接读宽和高的代码,得到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(); //上传图片的高
  } 
}

免责声明:文章转载自《Java读取图片和EXIF信息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇简谈docker-compose内存控制Java问题VS中,如何将存在于解决方案里,但是没有显示出来的文件(或文件夹)显示到项目中。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

TinyMCE实现word图片自动转存

由于工作需要必须将word文档内容粘贴到编辑器中使用 但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题 考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解决这一问题 发现不管什么编辑器只要将图片转换成base64后...

关于ZFS、GPT、4K、Geom Label的一些说明

日前重建了之前被玩坏的zfs,碰到几个概念,查了很多资料,理清一下一、关于硬盘分区表目前常用的有两种分区表,MBR和GPT,但是严格来说ZFS并不需要任何一种分区表,ZFS可以直接管理裸盘,换句话说,zfs对硬盘有自己的管理方式,不需要经过MBR或者GPT这一层二、Geom Label和GPT分区表冲突的问题Geom Label使用glabel命令创建,会...

InnoDB recovery过程解析

本文来自网易云社区。 InnoDB如果发生意外宕机了,数据会丢么?对于这个问题,稍微了解一点MySQL知识的人,都会斩钉截铁的回答:不会!为什么?他们也会毫不犹豫的说:因为有重做日志(redo log),数据可以通过redo log进行恢复。回答得很好,那么InnoDB怎样通过redo log进行数据的恢复的,具体的流程是怎样的?估计能说清楚这个问题的人剩...

iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码

最近接了个小任务,和公司的iOS小伙伴们分享下instruments的具体使用,于是有了这篇博客...性能优化是一个很大的话题,这里讨论的主要是内存泄露部分。 一. 一些相关概念 很多人应该比较了解这块内容了...可以权当复习复习... 1.内存空间的划分: 我们知道,一个进程占用的内存空间,包含5种不同的数据区:(1)BSS段:通常是存放未初始化的全局变...

springboot 扫描不到包 @SpringBootApplication 自动配置原理

解决方案### 在main类中增加注解 @ComponentScan("com.test.test.*") 扫描具体的包 @ComponentScan(basePackages = {"com.test.test"}) 扫描父类之后的包 SpringBoot的启动类最好是放在root package下 原因### @SpringBootAppli...

php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明

php有一款插件叫做imagemagick,功能很强大,提供了图片的很多操作,图片剪切、压缩、合并、插入文本、背景色透明等。并且有api方法调用和命令行操作两种方式,如果只是简单处理的话建议api方法调用,如果是很复杂的操作建议服务器端搭shell命令行操作,因为api方法调用同操作对比命令行他更吃内存,并且效率没有命令行那么高。 本文章就对于这些常见操作...