px转pt的正确算法

px转pt的正确算法

必要的前言

首先,pt是一个物理常量,是现实世界的度量单位,有肯定的数值,1pt = 1/72英尺python

而像素是一个变量,基于显示设备的参数不一样,一个像素的大小也不尽相同。而像素大小的计算方式就是DPI(dots per inch),固然,在如今这个讨论的情景下,其实DPI就是PPI(pixels per inch)。通常咱们聊显示器的DPI的时候,咱们说的就是PPI。算法

简单的公式

不想了解原理的话,能够直接拿一个相对通用但不正确的公式:windows

pt = px * 0.75

计算原理

其实就是小学数学。已知下面的条件code

  1. 1英寸=72 pt
  2. 1英寸=DPI px
  3. 求1px=多少pt?

上面公式的由来正是假设DPI是96:blog

pt = px * 72 / DPI
pt = px * 72 / 96
pt = px * 0.75

举例具体场景来讲,把图片的宽度换算成pt单位。整个换算逻辑是:图片

  1. 若是源图片指定了 DPI(dots per inch),视做 PPI(pixels per inch),将px单位的宽高换算为pt单位。[1]
  2. 若是源图片没有 DPI 元数据,则默认为 96 DPI [1]

最终代码是get

from PIL import Image
image = Image.open('in.png')

dpi = image.info.get('dpi', 96.0)
ratio = 72.0 / float(dpi)
width_by_pt = image.width * ratio

参考资料:数学

[1] Where does 96 DPI come from in Windows?io

相关文章
相关标签/搜索