前端不止:Retina屏幕下兩倍圖

2021-02-13 ThoughtWorks洞見
所見不一定即所得

眼睛是心靈的窗戶,也是蒙蔽你的一種途徑。

假設,我給你一張圖片,你覺得肉眼可以觀察到全部的細節嗎?

屏幕上一張清晰的圖片

肉眼在屏幕上看到圖片的清晰度由三個因素決定,一是圖片像素本身是否精細,二是屏幕解析度,三是屏幕大小。

我們來逐步分析它們之間的關係:

屏幕解析度

屏幕解析度也就是設備解析度,設備像素,它是物理的像素,比如,新的iPhone7,屏幕解析度是1334 x 750像素解析度,326 ppi。

圖像大小

如果你學過《數字圖像處理》這門課,那你對下面的解釋就是非常熟悉了。

位圖是由像素(Pixel)組成的,像素是位圖最小的信息單元,存儲在圖像柵格中。每個像素都具有特定的位置和顏色值。按從左到右、從上到下的順序來記錄圖像中每一個像素的信息,如:像素在屏幕上的位置、像素的顏色等。位圖圖像質量是由單位長度內像素的多少來決定的。單位長度內像素越多,解析度越高,圖像的效果越好。

假設,以上這個logo的圖像大小是1334 x 750像素和iPhone7屏幕解析度一樣,那麼,一位圖像素對應的就是一個設備像素,這就是會是一個完全保真的顯示。因為一個位置像素不能進一步分裂,我想這一點應該大家非常容易理解,也就是一個蘿蔔一個坑。

屏幕解析度和屏幕尺寸

相信大部分人對上面這個設置肯定特別熟悉,有些人可能對XP,甚至98系統的樣式更熟悉(一不小心暴露了年齡),在Windows系統下,提高屏幕解析度一般都需要提高屏幕尺寸。

因為在固定屏幕的情況下,提高屏幕解析度(如上圖),圖像和文字顯示目標會相應縮小,原因是系統並不會自動根據屏幕尺寸和解析度關係相應的調整文字和圖標的大小,這是Windows系統自身的行為。

我相信,如果家裡有年長的人使用電腦,肯定屏幕解析度調的很低,因為這樣文字和圖標才會比較大,我家06年買的臺式機就是這樣。

也因此,我們很容易有一個錯覺,那就是屏幕越大,解析度就能越大(在單位面積內像素數量固定的情況下,尺寸越大,單個屏幕擁有的像素就越多,解析度自然就越大)。

直到,蘋果Retina屏幕的出現,原來小屏幕也可以擁有大解析度。

PPI的概念

PPI,像素密度,即每英寸所擁有的像素數目(比如:上面iPhone 7的PPI是326),PPI數值越高,代表顯示屏能夠以越高的密度顯示圖像,畫面的細節就會越豐富。

以Retina屏幕為例,它並不是像普通顯示器那樣通過增大尺寸來增加解析度,而是靠提升屏幕單位面積內的像素數量,即像素密度來提升解析度,這樣就有了高像素密度屏幕。

根據上面的分析,解析度提升了,那麼圖標和文字尺寸就會變小,但是Mac的作業系統不同,它自動採取相應的模式(如Mac下的HiDPI)進行適配,將縮小後的字體(蘋果一直採用矢量字體)和圖標重新放大,這樣蘋果用了更多的像素數來顯示同樣的內容,所以顯示尺寸仍然不變。

蘋果將「高像素密度屏幕」的概念營銷出一個專業的術語「Retina」,將其稱為雙密度顯示,聲稱人類的肉眼將無法區分單個像素。

當一個顯示屏像素密度超過300ppi時,人眼就無法區分出單獨的像素。這也是講:顯示設備清晰度已達到人視網膜可分辨像素的極限。因此,行動電話顯示器的像素密度達到或高於300ppi就不會再出現顆粒感,而手持平板類電器顯示器的像素密度達到或高於260ppi就不會再出現顆粒感,蘋果電腦Mac的Retina顯示器像素密度只要超過200ppi就無法區分出單獨的像素。

好,說了這麼多,都是談屏幕的問題,貌似和前端開發沒有什麼關係,我又不是要買新手機(呵呵),那麼現在,我們現在來談談前端的問題。

Web中的像素(CSS像素)

CSS像素是一個抽象概念,設備無關像素,簡稱-「DIPS」,device-independent像素,主要使用在瀏覽器上,用來精確的度量(確定)Web頁面上的內容。

在標準情況下一個CSS像素對應一個設備像素。

.box {  width: 200px;  height: 300px;  font-size: 12px;}

上面的代碼,將會在顯示屏設備上繪製一個200x300像素的盒子,在標準屏幕下,它佔據的就是200x300設備像素。但是在Retina屏幕下,相同的div卻使用了400x600設備像素,保持相同的物理尺寸顯示,導致每個像素點實際上有4倍的普通像素點。

對於圖片來說也是如此:

這個時候,屏幕會怎麼處理呢?其實,有點類似圖像軟體的放大圖片功能,採用自有的算法(圖像處理算法)計算放大方式。只不過,這裡是蘋果Retina屏幕的計算方法,一個CSS像素點實際分成了四個,造成顏色肯定會存在偏差(非全保真的顯示),於是,我們看上去就變得模糊了(特別是圖片,非常的明顯)。

開發當中遇到這樣的事情,我們應該怎麼處理呢?這時,我們需要引出devicePixelRatio的概念。

devicePixelRatio設備像素比

window.devicePixelRatio是設備上物理像素和設備獨立像素(device-independent pixels (dips))的比例。

公式表示就是:window.devicePixelRatio = 物理像素 / dips

普通密度桌面顯示屏的devicePixelRatio=1

高密度桌面顯示屏(Mac Retina)的devicePixelRatio=2

主流手機顯示屏的devicePixelRatio=2或3

舉例說明,一張100x100的圖片,通過CSS設置它{ width:100px; height:100px }。在普通密度桌面顯示屏的電腦上打開,沒有什麼問題,但假設在手機/或者Retina屏幕的Mac,按照邏輯解析度來渲染,他們的devicePixelRatio=2,那麼就相當於拿4個物理像素來描繪1個電子像素。這等於拿一個2倍的放大鏡去看圖片,圖片可能因此變得模糊。

代碼如何解決呢?

原理我們明白了,那麼從代碼層面,我們應該如何實現呢?

一個常見的做法是把圖片換成200x200的,CSS寬高不變,仍然是{ width:100px; height:100px },這樣,CSS寬高換算成物理像素是200x200,圖片也是200x200,就不會變糊了。可以採用媒體查詢和JS操作的方式

CSS Media Queries

#element { background-image: url('hires.png'); }@media only screen and (min-device-pixel-ratio: 2) {  #element { background-image: url('hires@2x.png'); }}@media only screen and (min-device-pixel-ratio: 3) {  #element { background-image: url('hires@3x.png'); }}

JS查詢

retinajs庫

是不是適配Retina屏幕所有的圖片都需要切換呢?

不是,一般情況下,不需要針對網站上的所有圖片都提供兩個版本(非Retina屏幕和Retina屏幕),大部分圖片縮放並不會太多的影響用戶的體驗。

常常需要被處理的圖片有:網站的logo、彩色圖片圖標,因為他們的圖像大小都偏小,在Retina上物理像素放兩倍顯示就會出現模糊情況,這個時候,你就需要通過媒體查詢或者JS操作來替換圖片。

最後

眼睛是心靈的窗戶,也是蒙蔽你的一種途徑,帶上知識的眼鏡,將世界看個清楚。

- 相關閱讀 -

你聽說過「風格指南驅動開發」嗎?

前端框架這麼多,該何去何從?

點擊【閱讀原文】可至洞見網站查看原文&綠色字體部分的相關連結。

本文版權屬ThoughtWorks公司所有,如需轉載請在後臺留言聯繫。

相關焦點

  • 移動端適配(一)設備獨立像素1px問題,前端需要知道
    谷歌區分手機屏幕按照:mdpi、hdpi、xhdpi、xxhdpi;蘋果區分手機屏幕是按照:非高清屏,高清屏(視網膜屏即retina屏)、超高清屏;常見屏幕ppi:Iphone4326ppi視網膜(retina)設備:解析度達到300ppi(每英寸300個像素點),所以蘋果從iphone4開始就已經是retina屏了。在retina屏上用1倍圖會模糊。
  • 移動端適配(二)實操篇,前端必掌握技能
    html中的font-size值來達到適配行動裝置屏幕。現在行動裝置發展很快,我們知道dpr值越大,屏幕越高清。dpr=1的屏基本快沒了,iphone4開始已經是retina屏了,除了dpr=2我們常見的設備像素比,其實還有很多android設備的dpr為2.5,還有iphoneX的dpr為3.0。但是我們的設計稿很多時候只有一個尺寸,其實布局還好,就是圖片的顯示有些問題。
  • 前端不止:請告訴我,你要什麼樣的圖標
    (FlatIcon圖標)   它的優點是:   能夠使用彩色的圖標能夠支持大部分瀏覽器   缺點是:   圖標大小是固定的(不能根據場景自由縮放)Retina屏幕需要兩倍圖   開發人員拿到這樣的圖標,通常需要先將其合成為一張圖片,以方便製作雪碧圖
  • Retina屏外接2k顯示器效果差?程式設計師實測2K屏開啟Hidpi畫質逆襲
    寫在前面對於一個程序猿來說,每天大部分的時間都是在和電腦屏幕「深情」對視,不管是前端還是後臺,都需要同時運行許多開發軟體,屏幕太小,不僅會影響開發效率,切過來換過去還會影響寫代碼的心情。這個功能類似手機和電腦上的自動調節亮度,在不同的光線環境下,主動調節屏幕亮度,對我這種寫代碼,剪視頻都喜歡在深夜的人來說簡直是福音。開啟智慧調光功能後,屏幕下方的小下巴感應模塊就點亮了。會根據外部光線調整自身的亮度。
  • 【解剖英語-視網膜】The structure and en face patterns of the retina
    The outer wall of the vesicle forms the retinal pigment epithelium and the inner, the neurosensory retina.
  • 不止屏幕問題
    這款手機的可摺疊屏幕本身就容易出現問題,但麻煩遠不止於此。目前來看,作為一部手機,Galaxy Fold並不是一部好手機,更算不上沒有瑕疵的平板電腦。雖然Galaxy Fold被稱為一款可以在兩者之間自由變換的組合設備,被譽為移動計算領域的未來,但目前來看這還只是一個想法而已。三星的第一個測試版Galaxy Fold手機於4月15日到貨,拿到手機時不免讓人激動。
  • iPhone 8的屏幕及其解析度大小見解
    2014 年在蘋果發布iPhoe 6 和 iPhone 6 Plus 之前,我嘗試猜測了這兩臺設備像素大小,最後我猜測的結果是:-4.7 英寸屏幕:1334 × 750,326 PPI @2x-5.5 英寸屏幕:2208 × 1242,461 PPI @3x  @2x 即到目前為止所有 Retina iOS 設備屏幕的 Retina 像素的兩倍
  • 高PPI是誤解 到底什麼才是Retina屏幕
    蘋果的Retina Display(視網膜屏幕)從iPhone 4發布會首次亮相以來,一直是蘋果產品非常重要的特性之一,很多人也是首選帶有Retina屏幕的蘋果產品。
  • 前端工作面試問題總結 - 看了立馬月薪double
  • > 不是Retina顯示屏 iPodTouch4屏幕有差別
    而發布iPod Touch4的時候賈伯斯稱新款的iPod Touch4採用了與iPhone 4相同的屏幕,不過從國外的近距離對比視頻當中似乎並沒有那麼簡單。屏幕截圖    國外著名的科技博客類網站Engadget目前已經試用了全新的iPod Touch4並且拍攝了視頻。
  • 閒聊前端監控系統
    搭建前端監控系統(二)JS錯誤監控篇如果你是一位前端工程師,那你一定不止一次去解決一些頑固的線上問題,你也曾想方設法復現用戶的bug,結果可能都不太理想。怎樣定位前端線上問題,一直以來,都是很頭疼的問題,因為它發生於用戶的一系列操作之後。
  • 南京前端線下培訓機構好處,南京前端培訓機構選哪家,前端培訓
    就目前而言,選擇南京前端線下培訓機構的人數遠遠高於線上培訓,是什麼原因導致的呢?南京前端線下培訓機構有哪些過人之處?為什麼這麼多人選擇。我們下面就來分析分析。1.線下培訓機構能及時接收到反饋線下培訓的主要方式是課堂式、講座式的培訓,在教室裡,由老師直接向學員傳授前端相關知識,手把手帶學員做各類項目。它的好處在於能夠及時接收到反饋,老師可以根據學員的直接反應把控培訓的內容和進度。
  • Snapseed 新增 Retina 屏幕和 Instagram 支持
    最重要的更新包括 iPad Retina 屏幕支持,以及可以直接將圖片輸出至 Instagram。Snapseed 自帶的好幾款流行的濾鏡也有更新,甚至能夠和 Instagram 的濾鏡媲美。黑白模式濾鏡的轉換算法得到了改進,彩色濾鏡也提升了一些畫質。中央對焦濾鏡新增了一個功能,用戶可以控制中央或邊緣部分的亮度,仔細雕琢一番,iPad 和 iPhone 的照片也能與單反照片獲得一樣的感覺。
  • 錢楓的頭比王一博大了兩倍不止,網友笑噴:沒有對比就沒有傷害
    只見照片中錢楓的頭看起來比王一博的大了兩倍不止,對比太強烈,讓人哭笑不得,眾所周知王一博是娛樂圈中發展勢頭正猛的流量明星,他自出道以來就憑著出眾精緻的顏值收穫了不少粉絲的支持,不僅有著強大的實力還有這花美男一般的樣貌。
  • 「地臺床」一床三用,空間放大兩倍不止,看著高級住著舒服!
    「地臺床」一床能夠三用,空間放大兩倍不止,看著高級住著舒服,一起來看看吧。1. 普通地臺床這種地臺床是用木板代替了床架,抬高地面用木板做一個底,再把床墊放在上面。普通的地臺床有許多好處,首先地臺區域面積足夠大可以當做桌子,睡覺時脫的衣服可以直接放在地臺上,還可以放一些書、水杯、檯燈。
  • 印度第一人口大邦,人口為廣東省的兩倍不止,那麼經濟差了幾倍?
    印度是一個神奇的國家,相信大家早有耳聞,在國土面積僅為中國三分之一的時候,人口近乎與中國相當了,而今天就說說在印度人口最多的一個邦,印度第一大省,人口為廣東省的兩倍不止,那麼經濟差了幾倍?中國的稱作省,印度稱為邦,印度有一個北方邦,為當地第一人口大邦,面積約為24萬平方公裡,與中國的廣西相近,而就是這個地方,人口卻達到了2億2792萬人,這是一個什麼概念呢?
  • 屏幕不光只看尺寸 各材質屏幕實戰解析
    為什麼有些人的手機可以在強光下依然能夠顯示清晰,這很大程度取決於屏幕材質和屏幕顯示技術。今天筆者就目前市場上熱銷的幾款不同材質的手機進行一下測試,看看到底各材質屏幕在不同條件下的顯示效果誰更強。簡單地說,TFT面板的基本結構是兩片玻璃基板 中間夾一層液晶,前端LCD面板貼上彩色濾光片,後端TFT面板上製作薄膜電晶體。當在電晶體上施加電壓時,液晶發生轉向,光線穿過液晶後在前端面板上投 射一個像素。背光模塊位於液晶層面板之後負責提供光源。彩色濾光片給每個像素一個特定的顏色,結合每一個不同顏色的像素呈現出來的就是面板前端的圖像。