DPI/PPI/dp/sp/px/pt 移動(dòng)設(shè)計(jì)手冊(cè)

6 評(píng)論 39860 瀏覽 72 收藏 14 分鐘

做移動(dòng)設(shè)計(jì)的同學(xué),不管是原生app或者web app,應(yīng)該對(duì)字體字號(hào)都是很頭痛的問題。根本原因是,我們用唯一分辨率的電腦,設(shè)計(jì)各個(gè)不同尺寸大小分辨率的設(shè)備,那簡(jiǎn)直要瘋掉了。

 

但不要著急,我們先來理解一下一些名詞:

我們一般會(huì)碰到的度量單位主要有:dpi、ppi、dp、sp、px、pt、in。其中,px應(yīng)該各位最熟悉的單位,也是我們主要使用的photoshop或者axure等工具用的度量單位,而它在移動(dòng)端時(shí),的確已經(jīng)“過時(shí)”了。但不要著急把它丟掉,因?yàn)樗墙酉聛矸浅V匾膿Q算單位(所有手機(jī)參數(shù)還是用px在表達(dá))。

dpi和ppi這兩個(gè)是密度單位,不是度量單位,而這兩個(gè)恰恰是我們換算中重要的分母。簡(jiǎn)單理解一下:

  • ppi (pixels per inch):圖像分辨率 (在圖像中,每英寸所包含的像素?cái)?shù)目)
  • dpi (dots per inch): 打印分辨率 (每英寸所能打印的點(diǎn)數(shù),即打印精度)

dpi主要應(yīng)用于輸出,重點(diǎn)是打印設(shè)備上

我們?cè)谝苿?dòng)應(yīng)用中提到ppi和dpi其實(shí)都一樣(概念不同,但對(duì)設(shè)計(jì)來講沒有特別需要深入了解),所以我們先忽略掉dpi。而ppi的運(yùn)算方式是:

1
PPI = √(長(zhǎng)度像素?cái)?shù)2 + 寬度像素?cái)?shù)2) / 屏幕對(duì)角線英寸數(shù)

舉個(gè)簡(jiǎn)單的栗子,iphone5的ppi是多少?ppi=√(1136px2 + 640px2)/4 in=326ppi(視網(wǎng)膜Retina屏).這樣大家就能夠明白ppi和px的關(guān)系。

這里還提到in(英寸)這個(gè)詞,這個(gè)非常重要,因?yàn)楝F(xiàn)實(shí)中我們經(jīng)常提到4英寸手機(jī)或者5.5英寸大屏手機(jī),而這個(gè)尺寸是用戶真正感受到的物理大小,所有提到不同尺寸的屏幕不僅僅是分辨率或者像素,而更多的是英寸。

好,現(xiàn)在關(guān)鍵的來了,dp、sp、pt,是我們?cè)O(shè)計(jì)中的關(guān)鍵。

  • dp:Density-independent pixels,以160PPI屏幕為標(biāo)準(zhǔn),則1dp=1px,dp和px的換算公式 :

    dp*ppi/160 = px
    比如1dp x 320ppi/160 = 2px

  • sp:Scale-independent pixels,它是安卓的字體單位,以160PPI屏幕為標(biāo)準(zhǔn),當(dāng)字體大小為 100%時(shí), 1sp=1px。

    sp 與 px 的換算公式:
    sp*ppi/160 = px

是不是看起來dp和sp一樣,在Android設(shè)計(jì)原則中,有提到這兩個(gè)單位,他建議文字的尺寸一律用sp單位,非文字的尺寸一律使用dp單位。例如textSize=”16sp”、layout_width=”60dp”。

為什么要把sp和dp代替px?最簡(jiǎn)單的原因是他們不會(huì)因?yàn)閜pi的變化而變化,在相同物理尺寸和不同ppi下,他們呈現(xiàn)的高度大小是相同。也就是說更接近物理呈現(xiàn),而px則不行。

但問題來了,ps或者axure里面沒有sp或者dp這個(gè)選項(xiàng)啊,怎么辦?看到網(wǎng)上有人說用pt去替換px(pt是物理高度,1in=72pt)。補(bǔ)充一下自己推算的pt轉(zhuǎn)換px的公式,不一定對(duì),可以參考:例如9pt,再96dpi下,那么就是9 * 1/72 * 96 =12px。而在72ppi下,9pt=9px。

我再來做個(gè)小小的實(shí)驗(yàn):

  1. 先了解清楚你筆記本的ppi,比如我的macbook air是11.6英寸,1366 x 768分辨率,那么它的ppi就是135ppi。
  2. 然后新建一個(gè)頁(yè)面,輸入的ppi值就是你電腦的ppi值。我們先來看看不同ppi值在電腦上呈現(xiàn)的字體大小是怎么樣的:

mobile-font3
我用的都是arial 14點(diǎn)(注:專家指正這里不是px而是pt,點(diǎn))的字體,但在320ppi、160ppi、135ppi(我自己的)以及標(biāo)準(zhǔn)72ppi下的大小,截然不同。

好,我們?cè)賮砜纯矗陔娔X上直接截圖web頁(yè)之后對(duì)比的效果:
mobile-font4
你會(huì)驚訝的發(fā)現(xiàn),只有72ppi是正常的,其他字體都不對(duì)了,因?yàn)樵镜膚eb設(shè)計(jì)是不用考慮dp、sp或者ppi的,它是直接px作為物理單位的,而點(diǎn)在72ppi下(1pt x 1/72 x 72dpi=1px)是正常顯示的。所以我們以前做web的時(shí)候根本不用擔(dān)心自己的設(shè)計(jì)在別人電腦上看起來會(huì)很大或很小。當(dāng)然其實(shí)像firefox是用96dpi,也就是9pt=12px。

但我再截一下用iphone訪問web之后的圖:

mobile-font5

好吧,這時(shí)候,你就發(fā)現(xiàn)72ppi是見鬼了,因?yàn)檫@個(gè)字體在手機(jī)上看到完全地小了,所以做移動(dòng)設(shè)計(jì)不要傻乎乎地還用72ppi了,不然你很難判斷效果。(當(dāng)然你也可以借助我之前提到的同屏工具來映像到移動(dòng)設(shè)備上查看效果,但這個(gè)其實(shí)會(huì)很麻煩很麻煩很麻煩…)

但是到底是選160ppi還是135ppi呢?如果選了135ppi那在別人的電腦上會(huì)怎么樣呢?是不是又要重新調(diào)?其實(shí)不用,我借用另外一臺(tái)Retina的macbook pro做了相同的測(cè)試,你會(huì)發(fā)現(xiàn),其實(shí)和屏幕ppi無關(guān),而是和你在ps里設(shè)定的分辨率有關(guān)。

mobile-font6

[補(bǔ)充,有位專家指出我的不對(duì),就是在點(diǎn)和px上我搞錯(cuò)了,我又嘗試了一下,如果是px的話,不同ppi下字體大小是不變的,而點(diǎn)(pt)的話會(huì)有變化。

并且如果是用pt來代替px的話,為了整除方便,那么ppi一定要設(shè)置成72的倍數(shù),比如144ppi,上圖里面160ppi則會(huì)除不盡,所以上圖其實(shí)160ppi的字體還是和截圖字體有些許差異。]

然后有專家提出,iOS下是用pt作為字體單位,而Android是以sp作為字體單位,而且web app還是以px作為字體單位。怎么樣讓設(shè)計(jì)和輸出單位是一致的?我之前給出的解決方案并不十分嚴(yán)謹(jǐn)易懂,所以我重新編輯了一下。

為了求證移動(dòng)字號(hào)的問題,跑了一圈同事,最后只能暫時(shí)得出一些“不一定正確”的結(jié)論:

1. 字號(hào)行業(yè)標(biāo)準(zhǔn)幾乎沒有,不像web一樣,宋體12px、14px這樣很清楚。我唯一找到的只有Android的設(shè)計(jì)建議:

android_font

圖中原作者還換算了一下在240ppi下對(duì)應(yīng)的px值。

而我問了一圈同事,基本上現(xiàn)在設(shè)定字號(hào)都是憑感覺做事的。當(dāng)然你也可以參考Android這個(gè)標(biāo)準(zhǔn)。

2. 如何在電腦上快速預(yù)覽高清內(nèi)容是否排版合理,我想到最簡(jiǎn)單的一點(diǎn)就是縮放psd,縮放的比例很關(guān)鍵,要達(dá)到物理尺寸,首先你得知道你電腦的分辨率,我的分辨率是135ppi,如果要看分辨率是326的iphone上的效果,就縮小到135/326≈41.4%,你就會(huì)發(fā)現(xiàn)物理尺寸非常接近??梢钥纯匆恍┡虐嫔系膯栴}。當(dāng)然你也可以裝一些工具來達(dá)到更好的效果。

3. 怎么和開發(fā)溝通你的字體大?。课乙矝]有特別好的辦法,就簡(jiǎn)單分成3塊來說:

  • iOS,你設(shè)計(jì)的時(shí)候字體記得用“點(diǎn)”,然后ps設(shè)定分辨率用標(biāo)準(zhǔn)的72ppi即可,因?yàn)閾?jù)同事說,這樣下的pt值是準(zhǔn)確的,或者說iOS自動(dòng)會(huì)轉(zhuǎn)換這個(gè)值。具體也需要大家操作了才知道。而這個(gè)分辨率下1pt=1px,我簡(jiǎn)單換算了一下sp->px->pt的尺寸:
1
2
3
4
5
6
12sp=24.45px=24.45pt;
14sp=28.52px=28.52pt;
18sp=36.67px=36.67pt;
22sp=44.88px=44.88pt;
但這個(gè)小數(shù)點(diǎn)實(shí)在難受,所以四舍五入取整數(shù),并且為了保證可以整除,那么可以是24pt、28pt、36pt、44pt。</span>
  • Android,你就用標(biāo)準(zhǔn)sp就好了,當(dāng)然其他圖片等尺寸你可以用dp來表述。
  • Web app,這個(gè)我也找不到答案,因?yàn)閃eb app還會(huì)涉及到響應(yīng)式設(shè)計(jì),而且前端會(huì)用em去表示字體比例。所以同樣,如果你用72ppi分辨率做的話,直接可以把對(duì)應(yīng)的字號(hào)告訴開發(fā)就好了,當(dāng)然最好你所用到的字號(hào)是倍數(shù)關(guān)系,最小倍數(shù)是0.25,這樣用em去做比例的時(shí)候會(huì)更容易些。比如12px、16px、24px、32px這樣。

有關(guān)字體字號(hào)的研究已經(jīng)有同事在做,以后有結(jié)論了再和大家分享。

[以上都是本人自己瞎弄的,如果正確純屬偶然,所以請(qǐng)那些“笨蛋”閉嘴,我歡迎專業(yè)上的討論和交流,但不喜歡人品低下地謾罵。]

文章來源:Pre-alpha


第二篇:Android手機(jī)UI設(shè)計(jì)分辨率基礎(chǔ)知識(shí)(DPI,DIP計(jì)算)

術(shù)語(yǔ)和概念

Voila_Capture45

DPI值計(jì)算

比如:計(jì)算WVGA(800*480)分辨率,3.7英寸的密度DPI,如圖1所示

dpi-dip21

圖1?

Diagonal pixel表示對(duì)角線的像素值(=dpi-dip223),DPI=933/3.7=252

手機(jī)屏幕的分類

根據(jù)手機(jī)屏幕密度(DPI)或屏幕尺寸大小分為以下3類,如圖2所示

dpi-dip22

圖2

手機(jī)屏幕分類和像素密度的對(duì)應(yīng)關(guān)系如表1所示:

Voila_Capture46

表1

手機(jī)尺寸分布情況(http://developer.android.com/resources/dashboard/screens.html)如圖3所示,目前主要是以分辨率為800*480和854*480的手機(jī)用戶居多

dpi-dip2

圖3

從以上的屏幕尺寸分布情況上看,其實(shí)手機(jī)只要考慮3-4.5寸之間密度為1和1.5的手機(jī)

UI設(shè)計(jì)

從開發(fā)角度講,應(yīng)用程序會(huì)根據(jù)3類Android手機(jī)屏幕提供3套UI布局文件,但是相應(yīng)界面圖標(biāo)也需要提供3套,如表2所示

Voila_Capture47

表2

如何做到自適應(yīng)屏幕大小呢?

界面布局方面?

需要根據(jù)物理尺寸的大小準(zhǔn)備5套布局

  1. layout: 放一些通用布局xml文件,比如界面中頂部和底部的布局,不會(huì)隨著屏幕大小變化,類似windos窗口的title bar
  2. layout-small: 屏幕尺寸小于3英寸左右的布局
  3. layout-normal: 屏幕尺寸小于4.5英寸左右
  4. layout-large: 4英寸-7英寸之間
  5. layout-xlarge: 7-10英寸之間

圖片資源方面

需要根據(jù)dpi值準(zhǔn)備5套圖片資源:

  1. drawable
  2. drawalbe-ldpi
  3. drawable-mdpi
  4. drawable-hdpi
  5. drawable-xhdpi

Android有個(gè)自動(dòng)匹配機(jī)制去選擇對(duì)應(yīng)的布局和圖片資源

via:www.suerb.com

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 完全看暈

    來自上海 回復(fù)
  2. ?

    來自北京 回復(fù)
  3. 給我一塊磚,我拍死自己吧… ??

    來自河南 回復(fù)
  4. ??

    來自安徽 回復(fù)
  5. 看了兩遍,感覺很懵 ?

    來自廣東 回復(fù)
  6. 我看睡著了。 ? ? ? ?

    來自北京 回復(fù)