1. 程式人生 > >字型的大小(pt)和畫素(px)如何轉換?

字型的大小(pt)和畫素(px)如何轉換?

px:相對長度單位。畫素(Pixel)。
pt:絕對長度單位。點(Point)。
1in = 2.54cm = 25.4 mm = 72pt = 6pc

具體換算是: 
Points     Pixels     Ems   Percent 
6pt     8px     0.5em     50%    
7pt     9px     0.55em   55%    
7.5pt   10px     0.625em   62.5%    
8pt     11px     0.7em     70%    
9pt     12px     0.75em   75%    
10pt     13px     0.8em     80%    
10.5pt   14px     0.875em   87.5%    
11pt     15px     0.95em   95%    
12pt     16px     1em       
100%
13pt 17px 1.05em 105% 13.5pt 18px 1.125em 112.5% 14pt 19px 1.2em 120% 14.5pt 20px 1.25em 125% 15pt 21px 1.3em 130% 16pt 22px 1.4em 140% 17pt 23px 1.45em 145% 18pt 24px 1.5em 150% 20pt 26px 1.6em 160% 22pt 29px 1.8em 180% 24pt 32px 2em 200% 26pt 35px 2.2em 220% 27pt 36px 2.25em 225% 28pt 37px 2.3em 230% 29pt 38px 2.35em 235% 30pt 40px 2.45em 245% 32pt 42px 2.55em 255% 34pt 45px 2.75em 275% 36pt 48px 3em 300% 畫素與
毫米
的轉換 轉換還需要知道另一個引數:DPI(每英寸多少點) 象素數 / DPI = 英寸數 英寸數 * 25.4 = 毫米數 對於顯示裝置,不管是印表機還是螢幕,都有一種通用的方法 先用GetDeviceCaps(裝置控制代碼,LOGPIXELSX) 或者 GetDeviceCaps(裝置控制代碼,LOGPIXELSY)獲得裝置每英寸的畫素數 分別記為:px 和 py 一英寸等於25.4mm 那麼毫米換算成畫素的公式為 水平方向的換算: x * px /25.4 垂直方向的換算: y * py /25.4 畫素換算為毫米 x * 25.4 / px 在程式中這麼寫 MyControl.Height := 10{mm} * PixelsPerInch * 10 div 254; 分子和分母同乘以10,將浮點數運算轉化為整數運算,效率更高 常用的1024x768或800x600等標準的解析度計算出來的
dpi
是一個常數:96,因此計算出來的毫米與畫素的關係也約等於一個常數:

基本上 1毫米 約等於 3.78畫素

字型大小的設定單位,常用的有2種:px、pt。這兩個有什麼區別呢?

先搞清基本概念:px就是表示pixel,畫素,是螢幕上顯示資料的最基本的點;

pt就是point,是印刷行業常用單位,等於1/72英寸。

這樣很明白,px是一個點,它不是自然界的長度單位,誰能說出一個“點”有多長多大麼?可以畫的很小,也可以很大。如果點很小,那畫面就清晰,我們稱它為“解析度高”,反之,就是“解析度低”。所以,“點”的大小是會“變”的,也稱為“相對長度”。

pt全稱為point,但中文不叫“點”,查金山詞霸可以看到,確切的說法是一個專用的印刷單位“磅”,大小為1/72英寸。所以它是一個自然界標準的長度單位,也稱為“絕對長度”。

因此就有這樣的說法,pixel是相對大小,而point是絕對大小。

分清“螢幕效果”和“列印效果”:

在瀏覽網頁過程中,所有的“大”“小”概念,都是基於“螢幕”這個“介面”上。“螢幕”上的各種資訊,包括文字、圖片、表格等等,都會隨螢幕的解析度變化而變化,一個100px寬度大小的圖片,在800×600解析度下,要佔螢幕寬度的1/8,但在1024×768下,則只佔約1/10。所以如果在定義字型大小時,使用px作為單位,那一旦使用者改變顯示器解析度從800到1024,使用者實際看到的文字就要變“小”(自然長度單位),甚至會看不清,影響瀏覽。

那是不是用pt做單位就沒這樣的問題呢?錯!問題同樣出現。剛才的例子已經很清楚的說明,在不同解析度下,無論是px還是pt,都會改變大小。以現在的電腦螢幕情況,還沒有一種單位可以保證,在不同解析度下,一個文字大小可以“固定不變”。因為這很難以實現也不是很有必要:全球電腦使用者以億來數,螢幕從14寸到40寸甚至更高都有,螢幕大小不同,解析度也不同,要保證一個字型在所有使用者面前大小一樣,實在是MISSION IMPOSSIBLE。另外,電腦有其自身的調節性。

那在頁面設計中到底是用px還是pt呢?

我認為,這個並沒有什麼原則性差異,就看自己處於什麼角度思考了。

Mac機怎麼情況不清楚,在Windows裡,預設的顯示設定中,把文字定義為96DPI(PPI,微軟都將DPI和PPI混為一體,我們也就無須較真了)。這樣的定義,說明了:1px=1/96英寸。聯絡pt的概念,1pt=1/72英寸,可以得出,在這樣的設定中,1px=0.75pt,常見的宋體9pt=12px。在顯示器解析度不變的基礎上(比如現在常用的1024×768),1px大小也就固定不變,改變顯示設定,調整為144DPI,可以得出,1px=0.5pt,常見的宋體9pt=18px。原先用12px來組成的一個文字,現在需要18px來組成,px多了,文字就“大”了,更易閱讀了。

所以,px和pt的使用區別,只有當用戶改變預設的96DPI下才會產生:使用px定義文字,無論使用者怎麼設定,都不會改變大小;使用pt定義文字,當用戶設定超過96DPI的值,數值越大,字型就越大。

  (附公式:px = pt * DPI / 72) 對了,剛才還提到改變瀏覽器中文字大小的選項,也可以改變網頁的文字大小。但在這種情況下,使用px和pt都是無效的,因為這2個都是有實際“pixel”數值的單位,比如9pt是12px,大小固定。這裡要引用新的單位:em,其實就是%。因為當網頁中的字型沒有給出實際的px或pt定義的話,會有一個預設值:12pt即16px,對應瀏覽器中“字型大小”中的“中等”,以這個為標準,變大或縮小。(只適用於IE,在FF中,即便定義px或pt也都可以變大變小)

所以,從這個概念上看,em才是真正的“相對單位”(百分比嘛,當然是相對),而px和pt都是絕對單位(都有固定值)。

在網頁設計中,面向使用者的螢幕的基本單位是px,因此使用px作為單位是最簡單也最容易理解的,而pt也不過是通過了Windows的設定乘上了一個比率轉變成px再顯示,算是繞了個圈子。參考大部分大型網站,包括Adobe和Microsoft,都是使用px作為單位,而且在HTML中,預設的單位就是px,是不是也暗示著px是網頁設計的“內定單位”?

  但在Word或Photoshop中,使用pt就相當方便。因為使用Word和Photoshop的主要目的都不是為了螢幕瀏覽,而是輸出列印。當列印到實體時,pt作為一個自然長度單位就方便實用了:比如Word中普通的文件都用“宋體 9pt”,標題用“黑體 16pt”等等,無論電腦怎麼設定,打印出來永遠就是這麼大。又或者在Photoshop中,設定一個圖片中的某個藝術效果的字型是72pt大小,然後分別將這張圖片設為300DPI和72DPI,再打印出來,就可以看出,這2個字型大小完全一樣,只是“清晰度”不同,300DPI更清晰。這是毫無疑問的結果。

  最後整理一下所有出現過的單位:

  px:pixel,畫素,螢幕上顯示的最小單位,用於網頁設計,直觀方便;

  pt:point,是一個標準的長度單位,1pt=1/72英寸,用於印刷業,非常簡單易用;

  em:即%,在CSS中,1em=100%,是一個比率,結合CSS繼承關係使用,具有靈活性。

  PPI(DPI):pixel(dot)per inch,每英寸的畫素(點)數,是一個率,表示了“清晰度”,“精度”

PX和PT轉換的公式:

以前在文章中介紹過PX和PT的轉換規則,其實很簡單,pt=px乘以3/4。

比如12px×3/4=9pt大小。

PX和em轉換的公式:

對於PX轉em的方法也類似,就是em=16乘以px,也就是說1.5em=1.5×16=24px。