一个很好的开源类库metadata-extractor处理jpeg图片

本文介绍了在处理大图片时遇到的OutOfMemoryException问题,以及如何使用metadata-extractor库仅读取JPEG图片的头部信息获取长宽等参数,避免加载整个图片到内存。通过示例代码展示了如何读取图片高度和宽度,以及遍历所有元数据标签,该方法适用于大尺寸图片且速度快。
摘要由CSDN通过智能技术生成

由于工作关系最近一直在研究处理大图片的问题(大于2M),刚开始用BufferedImage类来读:

BufferedImage image = ImageIO.read(File file);这个在读取小图片的时候没有问题但是在遇到起过1M(具体大小跟据JVM可占用的最大内存-Xmx有关)的大图片时就会抛出,OutOfMemoryException错误.在网上找了很多资料大多都是提高JVM最大内存,但是这样一来产生了一个问题.如果遇到了10M,100M,或1G的图片呢,总不能无限到加到JVM内存吧.

其实我只是想读取jpeg图片的长宽等参数来判断,如果超过尺寸则不许用户上传图片,其实可以不用把整个图片都读取进来,而是只读jpeg的头信息里面就有我想要的内容,言归正传这个时候我在网上找到了metadata-extractor类库,这个正是用来读图片(现在只支持jpeg格式)的小东西.

1.在工程中导入metadata-extractor-2.3.1.jar(可以到http://www.drewnoakes.com/code/exif/下载jar包及源码,还有文档)

2.开始使用...

例子:

File source="C://h.jpg";

Metadata metadata

metadata-extractor是一个开源的Java库,它提供了一种方便的方式来从各种类型的文件中提取元数据。元数据是关于数据的数据,它描述了一份文件的属性、特征和内容。 metadata-extractor库支持从图片、音频、视频和各种文档格式(如PDF和Microsoft Office文档等)中提取元数据。它可以读取文件中的各种元数据信息,包括文件名称、大小、创建日期、修改日期、作者、描述、GPS位置、相机型号、拍摄日期、曝光时间、ISO速度等等。 使用metadata-extractor API非常简单。首先,我们需要将库添加到我们的项目中。然后,我们可以使用Java代码来创建一个Metadata对象,并将文件路径作为参数传递给它。然后,我们可以使用Metadata对象提供的各种方法来获取特定的元数据信息。 例如,如果我们想获取一张图片的拍摄日期和相机型号,我们可以使用如下代码: ``` File file = new File("image.jpg"); Metadata metadata = ImageMetadataReader.readMetadata(file); Directory directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class); Date date = directory.getDate(ExifIFD0Directory.TAG_DATETIME); String cameraModel = directory.getString(ExifIFD0Directory.TAG_MODEL); ``` 这段代码首先创建了一个File对象,并将文件路径传递给ImageMetadataReader.readMetadata()方法来读取图片的元数据。然后,它使用getFirstDirectoryOfType()方法来获取ExifIFD0Directory目录,并从中获取拍摄日期和相机型号。 metadata-extractor API还提供了其他方便的方法来获取和解析不同类型文件的元数据。通过使用这个库,我们可以轻松地获取各种文件中的元数据,方便我们在应用程序中进行进一步处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值