前端二倍圖的思考(涉及Retina)


EXCELL格式

1 csv格式導出來之后不能用EXCELL打開,會亂碼。用記事本打開,然后將“(英文的引號出掉),就可以了。

關於二倍圖的操作

概念:

設備像素:也叫物理像素,顯示設備上最微小的物理部件。 比如 iphone 5:640 x 1136px. 不同的機型有不同的設備像素,固定死的

這里需要講一下顯示分辨率一定的情況下,顯示屏越小圖像越清晰,反之,顯示屏大小固定時,顯示分辨率越高圖像越清晰。

  • 高分辨率屏幕:在 Windows 系統下,提高屏幕分辨率一般都是通過提高屏幕尺寸。而隨着屏幕分辨率的提升,圖像和文字顯示目標會相應縮小,造成觀看極其不便。
    Retina為什么那么小的屏幕會有那么大的分辨率。為什么那么大的分辨率,非但沒有使得文字和圖像變小,反而更加清晰了呢?

  • 高像素密度屏幕:高ppi, 以評估的 Retina 視網膜屏幕為例,它並不是像普通顯示器那樣通過增大尺寸來增加分辨率,而是靠提升單位面積屏幕的像素數量,即像素密度來提升分辨率,這樣就有了高像素密度屏幕。並且mac采用了矢量字體。

CSS像素: css pixel。抽象概念,設備無關像素。DIPS,device-independent像素。在標准情況下一個CSS像素對應一個設備像素。

body{
width:2px;
height:2px;
}

我們來對比一下這兩者的不同
image
使用css畫了一個2 x 2px的盒子,在普通設備屏幕下是2 x 2px的設備像素。但是在Retina的屏幕下去使用了4 x 4px的設備像素。

device-pixel-ratio:在JS中叫做window.devicePixelRatio
公式: window.devicePixelRatio = 設備像素/css像素。這樣,非視網膜屏幕的iphone上,屏幕物理像素320像素,獨立像素也是320像素,因此window.devicePixelRatio等於1.
但是在視網膜屏幕的iphone上,屏幕物理像素640像素,獨立像素還是320像素,因此,window.devicePixelRatio等於2.

屏幕密度: ppi :每英寸有多少的像素。視網膜屏幕:將960*640的分辨率壓縮在,一個3.5英寸的顯示屏內。也就是說,該屏幕的像素密度達到326像素/英寸(ppi)。當ppi>300的時候肉眼就無法分辨分辨率了。

![image](http://oanjd4byj.bkt.clouddn.com/pix%E5%85%AC%E5%BC%8F%E5%9B%BE%E7%89%87.png)

為什么需要兩倍圖/多倍圖

1 對於位圖而言:

  • 當一個光柵圖像在標准設備下全屏顯示時,一位圖像素對應的就是一設備像素,導致一個完全保真的顯示。因為一個位置像素不能進一步分裂,
  • 當在Retina屏幕下時,他要放大四倍來保持相同的物理像素的大小,這樣就會丟失很多細節,造成失真的情形。換句話說,每一位圖像素被乘以四填補相同的物理表面在視網膜屏幕下顯示。

工作原理:

方法一:

利用css樣式以及放兩倍圖。

有一張200x200像素的圖片(CSS像素,也就是普通像素點或者說是標准像素點),我們給圖片設置一個CSS樣式:

img{
width:200px;
height:200px;
}

圖片模糊的情況:固定好css像素。將width和height固定好。此時在這個width和height 對於不同的顯示器包含的像素已經確定了。然后在兩種不同屏幕上放圖片:那么Ritina屏幕圖片會模糊。因為沒有css像素的width height所對應Retina顯示器的像素數那么多。你硬生生的把這張圖片拉成那么大。必然模糊。
在iPad2或Mini iPad中就是很正常顯示的圖片;但是,在New iPad中,1個CSS像素點實際上有4個位圖像素點,1個分成4個,顯然不夠分啊,只能顏色近似選取,於是,圖片感覺就是模糊的。

因此,要想讓視網膜屏幕下的圖片高清晰顯示,我們需要的圖片的原始大小不能是200×200像素,而需要2倍高寬,即400×400像素,CSS像素限制依然是:

img {
  width:200px;
  height:200px;
}

此時,視網膜屏幕下圖片就顯示OK了(非視網膜屏幕圖片被壓縮-減少像素取樣——資源浪費!)。

image

方法二:

查詢像素密度:准備兩種大小但是一樣的圖片。利用css的媒體查詢或者JS的 Retina.js來調取圖片。(瀏覽器支持是一個問題)
1 css:
可以通過“device-pixel-ratio”屬性或者其擴展屬性“min-device-pixel-ratio”和“max-device-pixel-ratio”。這幾個Media Queries可以使用background-image為Retina准備高精密度像素的圖片。

.icon {
  background-image: url(example.png);
  background-size: 200px 300px;
  height: 300px;
  width: 200px;
}

@media only screen and (-Webkit-min-device-pixel-ratio: 1.5),
only screen and (-moz-min-device-pixel-ratio: 1.5),
only screen and (-o-min-device-pixel-ratio: 3/2),
only screen and (min-device-pixel-ratio: 1.5) {
  .icon {
    background-image: url(example@2x.png);
  }
}

2 js:
Retina.js 來處理。

方法三:

放縮放的矢量圖形(瀏覽器支持是一個問題)

image

獲得設備像素比后,便可得知設備像素與CSS像素之間的比例。也就是window.devicePixelRatio。
一倍圖:當這個比率為1:1時,使用1個設備像素顯示1個CSS像素。
二倍圖:當這個比率為2:1時,使用4個設備像素顯示1個CSS像素,
三倍圖:當這個比率為3:1時,使用9(3*3)個設備像素顯示1個CSS像素。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM