您的位置:首页 > 其它

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

2010-12-27 11:59 92 查看
由于工作关系最近一直在研究处理大图片的问题(大于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 = com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(source);

JpegDirectory jd = (JpegDirectory)metadata.getDirectory(JpegDirectory.class);
System.out.println("------------" + jd.getImageHeight()); //图片的高
System.out.println("------------" + jd.getImageWidth()); //图片的宽

由于只是读取图片的头信息,所以无论多大的图片都能读取,而且速度很快.

例子:读取图片已知的所有信息.

Metadata metadata = com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(source);

Iterator directories = metadata.getDirectoryIterator();
while (directories.hasNext()) {
Directory directory = (Directory)directories.next();
// iterate through tags and print to System.out
Iterator tags = directory.getTagIterator();
while (tags.hasNext()) {
Tag tag = (Tag)tags.next();
// use Tag.toString()
System.out.println(tag.toString());
}
}

大家有时间研究一下源码吧.没多少内容我只是用了其中的一个功能.

其它相关资源http://www.srcsky.com/kaiyuan/category/81?index=1&lang=8&show=hot头一回写博客,如果写的不好多多指教.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: