这不是问题,而是试图提高我对 DPI 如何以各种文件格式存储的理解,并讨论其工作原理的原因。
我对图像(JPG、PNG 和 Tiff)进行了大量工作并检测它们的分辨率。
例如,我可以在 Imagick 中的图像上运行它:
$imagick = new Imagick($filename); $data = $imagick->identifyimage(); var_dump($data);
它会给我分辨率和单位(PixelsPerCentimeter 或 PixelsPerInch)
在 Windows (11) 中,我只能在 JPG 的属性中看到分辨率,而不能在 PNG 的属性中看到分辨率,无论您将 PSD 设置为 PixelsPerCentimeter 还是 PixelsPerInch,它都会显示为 (300 dpi)。
在 Imagick(版本:ImageMagick 6.9.11-60 Q16 x86_64)中 - 它能够看到以 PixelsPerCentimeter 保存的 JPG 和以 PixelsPerInch 保存的 JPG 之间的差异。但对于 PNG,无论我如何在 Photoshop 中创建/保存它,它都会给出 PixelsPerCentimeter。
Photoshop (24.1.0) 还可以检测 JPG 上的 PixelsPerCentimeter - 但 PNG 都“说”它们是 PixelsPerInch,即使我将它们另存为 PixelsPerCentimeter。
现在我完全理解 118.11 PixelsPerCentimeter = 300 PixelsPerInch 但我真的很感兴趣为什么 Windows/Photoshop 和 Imagick 会这样对待它们?
我确实考虑到一开始在 Photoshop 中创建文件可能会产生副作用,因此我使用 Imagick 创建了一个文件(PNG、300dpi、PixelsPerInch),但 Imagick 将其指定为 118 PixelsPerCentimeter。
所以我想我的问题是:这些差异是否取决于文件的读取方式或文件类型中存储的实际元数据?
这不是一个权威、完整的答案 - 更像是一个“提示”,因为没有人回答您。
这有点像雷区,不同的软件有不同的长度。如果您想进一步研究它,
exiftool
及其-v
选项通常是最有帮助的。关于 PNG 图像
原始 PNG 规范有一个
pHYs
块,仅给出以米为单位的水平和垂直分辨率,英寸不可用。 此处描述了各种 PNG 标签。某些软件(ImageMagick 和
exiftool
)将(JPEG 样式)APP1 数据(见下文)非正式地存储在zTXt
块中。有些没有。2017 年 7 月,PNG 规范更新为允许
eXIf
块。请参阅此处。关于 JPEG 图像
在 JPEG 中,x/y 分辨率可能存储在 APP0、APP1 或 APP13 (Photoshop) 段中。我所知道的最好的描述是这里。
我从来没有对 XMP 数据那么感兴趣,但我相信 x/y 分辨率也可能存储在那里。