You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Imagick、Photoshop与Windows分辨率检测差异:原因探究(PPI/PPCM)

图像文件格式的DPI存储机制差异解析

场景与问题

我目前在大量处理JPG、PNG、Tiff格式图像的分辨率检测工作,使用Imagick的以下代码获取分辨率及单位:

$imagick = new Imagick($filename);
$data = $imagick->identifyimage();
var_dump($data);

过程中发现不同工具对DPI的处理存在明显差异:

  • Windows 11仅能在JPG属性中查看分辨率,PNG无此选项;且无论PSD设置的单位是PixelsPerCentimeter还是PixelsPerInch,均显示为300 dpi
  • Imagick 6.9.11-60 Q16 x86_64版本可区分不同单位保存的JPG,但无论Photoshop如何创建PNG,均返回PixelsPerCentimeter
  • Photoshop 24.1.0版本可检测JPG的PixelsPerCentimeter,但所有PNG均显示为PixelsPerInch,即便保存时设置为PixelsPerCentimeter
  • 用Imagick创建300dpi(PixelsPerInch)的PNG,Imagick返回的仍是118 PixelsPerCentimeter

我的疑问是:这些差异源于文件读取方式,还是不同文件类型的元数据存储机制?

解答

这些差异同时源于文件类型的元数据存储机制差异,以及不同工具的读取/解析逻辑差异,具体如下:

1. 文件格式的DPI存储规范差异

  • JPG(JPEG):在JFIF或EXIF元数据块中存储分辨率信息,支持明确指定单位(每英寸像素/每厘米像素),工具可直接读取原始单位标识。
  • PNG:分辨率信息存储在pHYs chunk中,该块仅存储像素密度数值和单位标识(0=无单位,1=每米像素,2=每英寸像素)。但不少工具会默认将PNG分辨率转换为每厘米像素返回,或写入时自动转换单位,导致读取时单位显示不一致。
  • PSD:内部分辨率元数据存储逻辑偏向自身处理,Windows属性面板读取时会统一转换为dpi显示,忽略原始单位设置。

2. 工具的读取/解析逻辑差异

  • Windows 11属性面板:对PNG的pHYs chunk支持不完善,未读取其分辨率信息;对PSD则统一转换单位,仅显示dpi数值。
  • Imagick:部分版本处理PNG时,会自动将每英寸像素转换为每厘米像素返回,即便原始存储的是英寸单位。
  • Photoshop:处理PNG时会统一将读取到的分辨率转换为每英寸像素显示,这是其UI显示逻辑决定的,与原始存储单位无关。

简言之,文件格式的存储规范是基础,不同工具为适配自身场景,会对元数据做不同的单位转换或显示处理,最终导致了你遇到的差异。


内容的提问来源于stack exchange,提问作者UrbanwarfareStudios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:45:29