在 PNG 中编码 96 DPI 的首选值

Preferred value to encode 96 DPI within PNG

PNG 文件可能包含大量可选信息。这些可选信息块之一是图像的物理分辨率(块签名pHYs)。[ 1] [2] 它包含单独的水平和垂直分辨率值作为 每单位像素 ,以及一个单位说明符,即对于未指定的单位可以是 0,对于 可以是 1 那是 非常混乱,因为分辨率传统上表示为DPI秒。

The Inch is defined as 25.4 mm in the metric system。 所以,如果我计算正确,96 DPI 意味着 3779.527559... 每米点数。对于 pHYs 块,这必须四舍五入。我会说 3780 是正确的值,但我发现网上也建议 3779。这两种图像也共存于我的机器上。

在大多数情况下,差异可能并不重要,

3779 * 0.054 = 95.9866
3780 * 0.054 = 96.012

但我尽量避免在 DPI 感知过程中混合两种图像时出现棘手的布局问题,例如使用 LaTeX 创建 PDF 文件。


[1] Portable Network Graphics (PNG) Specification (Second Edition), section11.3.5.3 pHYs Physical pixel dimensions

[2] PNG Specification: Chunk Specifications, section 4.2.4.2. pHYs Physical pixel dimensions

相对差异小于 0.03% (2.65/10000),几乎没有关系。

无论如何,我会选择 3780。它不仅是最接近的值,而且如果某些(草率的)转换器将值向下舍入(而不是四舍五入到最接近的值),它会给出正确的值。

此外,如果您 google“72.009 DPI PNG”,您会看到 72 DPI (example) 的类似(非)问题,似乎大多数人都将值四舍五入(这也是最近的)2834.645 -> 2835