【譯】重要的圖像優(yōu)化之七:圖像優(yōu)化要注意幾點

注明:本人原創(chuàng)翻譯,原版為Essential Image Optimization電子書,這里將其拆分為幾篇文章發(fā)布。另外,文中部分鏈接可能會因為“網(wǎng)絡(luò)”原因無法打開。不必著急,我會慢慢將其中一些比較好的內(nèi)容翻譯過來發(fā)表,都會在這個“Web圖像技術(shù)深究”專題中。

目錄

正文:

避免使用有損編解碼器重復(fù)壓縮圖像

建議始終從原始圖像開始壓縮。重復(fù)壓縮圖像會帶來惡果。假設(shè)您拍攝的JPEG已經(jīng)被壓縮,質(zhì)量為60。如果再用有損編碼重新壓縮此圖像,那它看起來會更糟。每一輪的壓縮都會帶來代數(shù)損失 - 信息將會丟失,并且開始產(chǎn)生虛影。即使您在高質(zhì)量的環(huán)境下,重復(fù)壓縮依然會是不好的結(jié)果。

為了避免這個陷阱,首先你要設(shè)置愿意接受的最低質(zhì)量值,這樣你從一開始就可以節(jié)省最多的文件存儲空間。同時,您還可以避免這種陷阱,因為任何文件體積的降低必然帶來可視質(zhì)量的降低。

重新編碼有損文件幾乎總是給你一個更小的文件,但這并不意味著你可以像你所想的那樣獲得盡可能好的質(zhì)量。

generational-loss.jpg
以上,從Jon Sneyers的優(yōu)秀視頻隨附文章中,我們可以看到多種圖像格式被重新壓縮后的影響。如果你從社交網(wǎng)絡(luò)中保存(已壓縮)圖像,并重新上傳(導(dǎo)致重新壓縮),就會遇到這個問題:質(zhì)量損失將會急劇增加。

因為網(wǎng)格量化的原理,MozJPEG(或許不小心)具有了更好的抗再壓縮性能。不同于精確的壓縮所有的DCT值,MozJPEG會檢查像素中+1/-1范圍內(nèi)的近似值,以查看相似的值是否壓縮到較少的字節(jié)。有損的FLIF在(重新)壓縮之前會有一個類似于有損PNG的黑科技,它可以查看文件的數(shù)據(jù)并決定丟棄什么。重新壓縮的PNG它具有可以檢測的“空洞”,以避免進一步的丟棄數(shù)據(jù)。

因此,編輯源文件時,請將其存儲為無損格式(如PNG或TIFF),以便盡可能保留質(zhì)量。這樣,您的構(gòu)建工具或圖像壓縮服務(wù)導(dǎo)出的壓縮圖像,才能在提供給你的用戶時保持最小的質(zhì)量損失。

減少不必要的圖像解碼和尺寸調(diào)整帶來的損耗

我們以前都盡量提供體積大的、高清晰的圖像給用戶,甚至根本就超過了用戶的需求。這樣做是有代價的。解碼和調(diào)整圖像尺寸,對于大多數(shù)的移動設(shè)備上的瀏覽器來說,是個昂貴的操作。如果發(fā)送大圖像,再使用CSS或width/height屬性重新調(diào)整尺寸,您可能會經(jīng)歷下面的等待,這是非常影響設(shè)備性能的。

image-pipeline.jpg

當(dāng)瀏覽器獲取圖像的時候,它必須將圖像從原始源格式(例如JPEG)解碼為內(nèi)存中的位圖。而通常,圖像又需要調(diào)整尺寸(例如,寬度已設(shè)置為其容器的百分比)。圖像的解碼和調(diào)整尺寸的操作是昂貴的,將會很大程度上延遲圖片顯示的時間。

發(fā)送給瀏覽器可以渲染的圖像,并且不需要調(diào)整尺寸,才是最理想的情況。所以,要為你的用戶提供適合屏幕尺寸和分辨率的最小圖像,利用<img>srcsetsizes屬性 - 我們將很快的覆蓋srcset,快速顯示出圖像。

忽略圖像(<img>)上的屬性widthheight屬性也可能會對性能產(chǎn)生負面影響。因為沒有它們的話,瀏覽器會先為圖像分配一個較小的占位符區(qū)域,然后直到足夠的字節(jié)到達才能知道正確的尺寸。這種處理方式下,頁面的文檔布局就必須要更新,而更新可能會是一個昂貴的步驟,它被稱做回流。

devtools-decode.jpg
瀏覽器必須經(jīng)過多個步驟才能在屏幕上繪制圖像。除了要獲取圖像,還需要對圖像進行解碼而且經(jīng)常需要調(diào)整尺寸。這些事件可以通過Chrome開發(fā)者工具中的Performance面板中的時間線進行查看審核。

當(dāng)然,更大的圖像也會帶來更大的內(nèi)存占用。解碼圖像每個像素需要占用4個字節(jié)。如果你不小心,你可以真正地讓瀏覽器崩潰; 在一些低端設(shè)備上,并沒有多大的空間來進行內(nèi)存交換。所以,請一定要注意您的圖像解碼、尺寸調(diào)整和內(nèi)存占用帶來的影響。

image-decoding-mobile.jpg

解碼圖像的成本在中低端的手機上,可能是非常昂貴的。在某些情況下,它的速度可能要慢上5倍還多。

Twitter(推特)在構(gòu)建它們新的移動網(wǎng)絡(luò)體驗時,通過確保向用戶提供最佳適配尺寸的圖像來提高圖像解碼的性能。這使得Twitter的許多圖像在時間軸上測試的解碼時間從400ms一直下降到19ms!

image-decoding.jpg

Chrome開發(fā)者工具中的時間軸/性能面板上,對比Twitter優(yōu)化其圖像管道之前和之后顯示的圖像解碼時間(綠色)。

使用srcset提供HiDPI圖像

用戶可以通過各種具有高分辨率屏幕的移動設(shè)備和桌面設(shè)備來訪問您的站點。在Web頁面中,設(shè)備像素比(DPR)(也稱為“CSS像素比”)被用來確定一個設(shè)備的屏幕分辨率如何被CSS來解釋。DPR是由電話制造商創(chuàng)建的,被用于在提高移動屏幕的分辨率和清晰度的情況下,不會使顯示的元素感覺太小。

而為了適配到用戶可能期望的圖像質(zhì)量,需要將最合適的分辨率的圖像提供到用戶的設(shè)備上。高DPR圖像(例如2x,3x)被聰明地提供給支持它們的設(shè)備,而較低或標準的DPR圖像則被提供給那些沒有高分辨率屏幕的用戶,因為這些所謂的2x+的圖像通常會顯著地占用更多的字節(jié)空間。

device-pixel-ratio.jpg
設(shè)備像素比:許多網(wǎng)站可以檢測流行設(shè)備的DPR,例如material.iomydevice.io。

srcset屬性允許瀏覽器為每個設(shè)備選擇最佳可用的圖像,例如為2x移動設(shè)備顯示2x圖像。沒有srcset支持的瀏覽器則會使用<img>標簽中src指定的默認值。

<img srcset="paul-irish-320w.jpg,
             paul-irish-640w.jpg 2x,
             paul-irish-960w.jpg 3x"
     src="paul-irish-960w.jpg" alt="Paul Irish cameo">

CloudImgix這樣的圖像CDN服務(wù)都支持控制圖像密度,并支持從單一的規(guī)范來源為用戶提供最佳密度的圖像。

<aside class="note"><b>注意:</b> 您可以通過這個免費的Udacity(優(yōu)達學(xué)城)課程和Web基礎(chǔ)知識中的圖像指南,了解有關(guān)設(shè)備像素比和響應(yīng)圖像的更多信息。</aside>

友好的提醒你,Client Hints也提供了一個替代的標記方案來指定每個可能的像素密度和圖像格式,借此來實現(xiàn)響應(yīng)圖像。不同的是,此信息是被附加到HTTP請求中,而Web服務(wù)器就可以通過它來選擇最適合當(dāng)前設(shè)備屏幕密度的圖像來返回回去。

藝術(shù)化的響應(yīng)

盡管向用戶提供適配分辨率的內(nèi)容很重要,但是有些網(wǎng)站可能會需要考慮藝術(shù)化的響應(yīng)圖像像是。如果用戶位于一個較小的屏幕上,則可能需要裁剪或放大圖像,以充分利用可用的空間突出圖像的主題內(nèi)容。雖然美術(shù)設(shè)計方面的內(nèi)容超出了這個寫作的范圍,但像Cloudinary的服務(wù)是提供了這樣的API,來盡可能地嘗試自動化的處理類似的需求。

responsive-art-direction.jpg
藝術(shù)化響應(yīng):Eric Portis放置了一個精彩的樣品來展示如何從美術(shù)設(shè)計方面響應(yīng)圖片。這個例子中通過焦點變換突出展示了焦點圖片的主題內(nèi)容,并充分利用了有限空間。

下一篇:【譯】重要的圖像優(yōu)化之八:顏色管理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內(nèi)容