一个很好的开源类库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头一回写博客,如果写的不好多多指教.
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头一回写博客,如果写的不好多多指教.
相关文章推荐
- 图像处理1_开源图片详细信息提取metadata-extractor
- Glide-----一个新的android图片处理开源项目
- 图像处理之基础---很好的一个快速比较两副图片是否相同的code 可用于公安鉴别
- svg engine 一个处理矢量图片的开源项目
- 图像处理3_使用 metadata-extractor 解析图片 exif 元数据信息
- 图像处理4_使用 metadata-extractor 修改图片名为拍摄时间
- (Facebook开源项目)Fresco:一个新的Android图像处理类库
- dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.
- 图像处理之基础---很好的一个开源文档库
- DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.
- 一个很好用的异步加载图片的类库SDWebImage
- 一个很好的开源图像处理软件--imageJ (2
- 开源图片详细信息提取metadata-extractor
- jpeg图片接收显示测试上位机[串口 网络 摄像头上位机软件 开源]
- SDWebImage使用——一个可管理远程图片加载的类库
- SDWebImage使用——一个可管理远程图片加载的类库
- .net上传图片的处理类库(缩略图、水印)
- LazyCode 自己开源的一个类库
- 介绍几个PHP的开源不错的图片类库
- 一个强大的图片处理工具