java 设置 照片 纸张类型,使用Java在JPEG中存储DPI和纸张尺寸信息

幸运的是,

java image I/O API让你做到了这一点.它还允许以与格式无关的方式设置图像元数据.例如,指定所需的DPI,这是我想要做的.

事实证明,设置dpi并不像预期那么简单……

java image I/O API是plug-in based,对于您希望使用的每种文件格式,必须提供适当的插件. API为编写插件中性代码提供了必要的abstractions,并且具有可在运行时查询的可用实现的存储库.从J2SE 6开始,每个JRE都必须提供PNG,JPG和BMP文件格式的插件(以及我尚未尝试过的其他一些插件).

设置图像元数据的规范是standard (plug-in neutral)元数据格式规范.奇怪的是,规范是XML模式.这是正确的,如果你想设置DPI,你将不得不通过使用IIOMetadataNodes和merge it构建一个DOM树来完成它!叹..

请注意,插件对标准元数据的支持可能不同:

无论如何,当您想要设置DPI时,相关标签是Horizo​​ntalPixelSize和VerticalPixelSize:

请注意,规范明确指出两者都必须以毫米每点表示.

如何忽视自己的规格,Sun风格

Sun已为其PNG和JPG插件实现了此元数据规范,并将其包含在当前的JDK和JRE发行版中.相关课程是

com.sun.imageio.plugins.png.PNGImageWriter

com.sun.imageio.plugins.jpeg.JPEGImageWriter

您可以从com.sun包中看出它们不是J2SE API的一部分,而是特定于Sun的实现.

还记得每个点的规格要求毫米吗?那么,看看下表,看看Sun实际上如何实现规范:

plug-in unit bug report date reported

PNGImageWriter dots per millimeter bug 5106305 23 sep 2004

JPEGImageWriter decimeter per dot bug 6359243 05 dec 2005

这些错误已经知道了很长时间,并且它们的修复非常简单.不幸的是,它们被赋予了低优先级,在撰写本文时(2008年7月)甚至没有被评估过.

大.怎么办?

好吧,因为解决方法是如此微不足道,我决定坚持使用图像I / O API.如果你给这些类他们想要的东西,位图就会很好.要确保您的导出代码也适用于正确实现规范的平台,它必须检查正在使用的实际实现类并补偿错误.

如果您发现自己处于类似情况,请确保您的解决方法代码能够在最终修复错误时应对.更多关于这篇文章’How bugs in the J2SE api can bite you twice‘.

哦,如果你使用instanceof来检查所有平台上不能保证存在的错误类的实例,请务必捕获NoClassDefFoundError;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值