java技术读取图片的分辨率值,单位为dpi
最近项目需要,对上传的图片需要获取并判断它的dpi值是否合格。右键单击图片,查看其属性,点击详细信息,可以看到图片的长宽(像素),以及水平、垂直分辨率(dpi),当然这种方式仅限于jpg图片,其他格式的图片可以使用ps查看。
从网上查了很多资料,很多人对分辨率的理解就是图片的长宽,我不是专门研究图片的,所以概念上不作辩论,但图片属性和ps显示的分辨率值单位均为dpi,长宽是另外的。
我在网上找到个apache的开源类——Sanselan(sanselan-0.97-incubator.jar),用简单的java代码试了一下,可以准确地读到dpi值,用了一个ImageInfo类,我用的InputStream实例化的ImageInfo。可以用到Uedit上传图片时,用Uedit提供的图片输入流实例化ImageInfo类,对上传的合格图片,有的dpi值读到却是-1,就是失败了,希望有使用Sanselan经验的人指点迷津。
西红柿炒自己
11 years, 6 months ago
Answers
关于自己提出的这个问题,已经得到验证。
- Ueditor富文本编辑器会对上传的图片进行修改,我所遇到的情况是,它把png图片改为了jpg图片,图片的大小,长宽也都变了。但不是所有上传的图片都会被转换,Ueditor有个阀值,把这个值调大了,图片就不会变了。
- Sanselan这个开源jar包,现在改名为Imaging。查看官方文档说明可以发现,这个开源组件并不是支持所有的图片,某些格式的图片仅支持符合某种规范的,所以某些从网上下载的图片读到的dpi值为-1。这只能提示用户使用ps软件将图片处理下或另存为一下,再上传就可以读取到dpi值了。
芙兰朵露S老师
answered 11 years, 6 months ago