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

相關文章
相關標籤/搜索