px转pt的正确算法

px转pt的正确算法

必要的前言

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

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

简单的公式

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

pt = px * 0.75

计算原理

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

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

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

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]

最终代码是

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?

转载于:https://my.oschina.net/u/3888259/blog/3083177

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值