【譯】重要的圖像優(yōu)化之四:“素人”JPEG下

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

目錄

正文:

JPEG的壓縮模式(接上文

使用JPEG優(yōu)化編碼器

現(xiàn)代化的JPEG編碼器會嘗試生產(chǎn)出更小更高保真的JPEG文件羹令,同時保持與現(xiàn)有瀏覽器以及圖像處理應(yīng)用程序的兼容性。它們避免了在運行的系統(tǒng)中引入新的圖像格式而帶來一系列變化损痰,并給圖像優(yōu)化壓縮帶來質(zhì)的變化福侈。這里就有兩個這樣的編碼器,它們是MozJPEG和Guetzli卢未。

簡單聊一下:你該使用哪個編碼器肪凛?

  • 一般使用MozJPEG
  • 如果你的核心關(guān)注點是圖像質(zhì)量,而且不在乎相對較長的編碼時間辽社,則使用Guetzli
  • 如果你需要更好的可配置性:
  • JPEGRecompress (底層使用了MozJPEG)
  • JPEGMini:它類似于Guetzli會自動選擇最佳質(zhì)量伟墙。但它不如Guetzli技術(shù)復(fù)雜,而且更快滴铅,其目標(biāo)是在于更適用于網(wǎng)絡(luò)的最佳質(zhì)量圖像戳葵。
  • ImageOptim API這里還有個免費的在線界面):它的顏色處理機(jī)制是獨一無二的,您可以分開選擇顏色質(zhì)量與整體質(zhì)量汉匙。另外拱烁,它可以自動選擇色度抽樣級別生蚁,以便在屏幕截圖中保留高分辨率顏色,并避免了在自然照片中平滑色彩的字節(jié)浪費戏自。

什么是MozJPEG邦投?

MozJPEG是Mozilla開源提供的現(xiàn)代化的JPEG編碼器。它聲稱要去除JPEG文件的10%左右的體積擅笔。使用MozJPEG壓縮的JPEG文件可以跨瀏覽器顯示尼摹,并且還包括漸進(jìn)式掃描優(yōu)化、網(wǎng)格量化(丟棄最少壓縮的細(xì)節(jié))以及一些優(yōu)秀的量化預(yù)設(shè)等功能剂娄,可以幫助創(chuàng)建更平滑的高分辨率圖像(當(dāng)然也可以使用ImageMagick,如果你愿意去瀏覽XML配置)玄呛。

MozJPEG不僅被ImageOptim所支持阅懦,并且還有一個可靠的可配置imagemin插件。以下是Gulp的簡單實現(xiàn)示例:

const gulp = require('gulp');
const imagemin = require('gulp-imagemin');
const imageminMozjpeg = require('imagemin-mozjpeg');

gulp.task('mozjpeg', () =>
    gulp.src('src/*.jpg')
    .pipe(imagemin([imageminMozjpeg({
        quality: 85
    })]))
    .pipe(gulp.dest('dist'))
);
Modern-Image10.jpg
image.png

MozJPEG:不同質(zhì)量的文件體積與視覺相似度得分的比較徘铝。

我用來自jpeg-archive項目的jpeg-recompress來計算一個源圖像的SSIM(結(jié)構(gòu)相似性)分?jǐn)?shù)耳胎。SSIM是一種用于測量兩個圖像之間的相似性的方法,其中的分?jǐn)?shù)就是一個圖像對比另一個圖像的“完美”相似測量值惕它。

根據(jù)我的測量結(jié)果怕午,MozJPEG的確是一個很好的選擇,它可以保持高視覺質(zhì)量來壓縮網(wǎng)頁的圖像淹魄,同時減少文件的大小郁惜。對于中小型圖像,我發(fā)現(xiàn)MozJPEG(質(zhì)量= 80-85)可以將文件大小減少30-40%甲锡,同時保持可接受的SSIM兆蕉,在jpeg-turbo庫上可以提高了5-6%讀取速度。MozJPEG確實要比基線JPEG編碼更慢缤沦,但這不足以成為你放棄它的理由虎韵。

注意:如果您需要一個支持MozjPEG的工具,并包含配置支持缸废,以及一些免費的圖像比較實用程序包蓝,請查看jpeg-recompress∑罅浚《Web Performance in Action》的作者Jeremy Wagner提供了一種參考配置测萎,如下:jpeg-recompress --min 35 --max 70 --strip --method smallfry --loops 16 in.jpg out.jpg

什么是Guetzli?

Guetzli是一個來自谷歌的梁钾、有前景的绳泉、有些緩慢的感知型的JPEG編碼器,它會試圖找到一個人眼在視覺上無法區(qū)分差異但卻體積最小的JPEG文件姆泻。Guetzli會執(zhí)行一系列感知測試零酪,為最終的JPEG提出方案冒嫡,并對每個方案進(jìn)行評估。最終在其中選擇最高評分的提案作為最終輸出四苇。

而為了測量圖像之間的差異孝凌,Guetzli使用Butteraugli,一種基于人類感知來測量圖像差異的模型(下面會介紹)月腋。Guetzli可以考慮到其他JPEG編碼器沒有的幾個視覺屬性蟀架。例如,人眼所看到的綠光量與藍(lán)色的敏感度之間是存在關(guān)系的榆骚,因此綠色旁邊的藍(lán)色信息的編碼就會動態(tài)修改的更精準(zhǔn)一些片拍。

注意: 圖片文件的大小更多取決于你圖片的質(zhì)量,而非使用的編解碼器妓肢。與通過切換編解碼器實現(xiàn)的文件大小節(jié)省相比捌省,最低質(zhì)量和最高質(zhì)量JPEG之間的文件大小差異要更大的多。因此碉钠,設(shè)置最低可接受的質(zhì)量非常重要纲缓。避免將您的質(zhì)量設(shè)置得太高,并且不去關(guān)注它喊废。

Guetzli 聲稱當(dāng)在Butteraugli得到同樣的質(zhì)量評分的情況下祝高,和其他編碼器相比可以將數(shù)據(jù)體積再減小20-30%。使用Guetzli的一個大問題就是污筷,它非常非常慢工闺,目前只適用于靜態(tài)內(nèi)容的優(yōu)化。從它的說明中可以看出瓣蛀,Guetzli需要大量的內(nèi)存(每百萬像素可能需要1分鐘+ 200MB的內(nèi)存)斤寂。這里有一個很好的Guetzli實踐測試報告【镜耄可以看到遍搞,Guetzli可以作為你的靜態(tài)網(wǎng)站構(gòu)建過程中圖片優(yōu)化的理想拼圖,但是在按需執(zhí)行時就并不合適了器腋。

注意:當(dāng)您將圖像優(yōu)化作為靜態(tài)網(wǎng)站的構(gòu)建過程的一部分時溪猿,Guetzli可能更加適用,或者在不需要按照要求執(zhí)行圖像優(yōu)化的情況時纫塌。

像ImageOptim這樣的工具诊县,同樣支持Guetzli優(yōu)化(在最新版本中)。

const gulp = require('gulp');
const imagemin = require('gulp-imagemin');
const imageminGuetzli = require('imagemin-guetzli');

gulp.task('guetzli', () =>
    gulp.src('src/*.jpg')
    .pipe(imagemin([
        imageminGuetzli({
            quality: 85
        })
    ]))
    .pipe(gulp.dest('dist'))

);
Modern-Image12.jpg

可以看到措左,為了節(jié)省些空間依痊,使用Guetzli編碼一張3 x 3MP的圖像要花費近七分鐘的時間(并且伴隨著高CPU使用率)。但是為了存檔更高分辨率的照片,我認(rèn)為付出些代價也是值得的胸嘁。

Modern-Image13.jpg

Guetzli:不同質(zhì)量的文件體積和視覺相似度得分的比較瓶摆。

注意:建議在高質(zhì)量圖像(例如未壓縮的圖像,PNG原圖或者100%質(zhì)量(或無損)的JPEG)上使用Guetzli性宏。雖然它可以在其他質(zhì)量的圖像(例如質(zhì)量為84或更低的JPEG)上工作群井,但結(jié)果可能較差。

使用Guetzli壓縮圖像是非常(非常)耗時的毫胜,可能會使你的用戶轉(zhuǎn)身而去书斜,但是對于較大的圖像,這是值得的酵使。我已經(jīng)可以看到一些使用案例里荐吉,Guetzli可以僅僅保留文件大小的40%,同時保持了視覺的保真度口渔。這使它非常適合存檔照片稍坯。在小到中等大小的圖像上,我仍然看到一些地方在應(yīng)用(在10-15KB的范圍內(nèi))搓劫,但是效果并不顯著。Guetzli可以在壓縮更小的圖像上引入更多的液化曲線失真混巧。

您可能還對Eric Portis的這項研究感興趣枪向,他將Guetzli與Cloudinary的自動壓縮功能進(jìn)行了比較,并從中獲得了一些有效的不同數(shù)據(jù)點咧党。

MozJPEG與Guetzli孰優(yōu)孰劣秘蛔?

比較不同的JPEG編碼器是很復(fù)雜的 —— 它需要比較壓縮圖像的質(zhì)量、保真度以及最終文件大小等多項內(nèi)容傍衡。正如圖像壓縮專家KornelLesiński指出的那樣深员,僅就單方面而非多個角度進(jìn)行測試比較,很可能會導(dǎo)致一個無效的結(jié)論蛙埂。

那Guetzli和MozJPEG比究竟如何呢倦畅?—— Kornel指出:

  • Guetzli更適用于更高品質(zhì)的圖像(butteraugli建議最好是q=90以上,而MozJPEG更適宜處理q=75左右的圖像)
  • Guetzli壓縮速度要慢得多(都是生成了標(biāo)準(zhǔn)的JPEG绣的,所以解碼速度是一樣很快的)
  • MozJPEG不會自動選擇質(zhì)量設(shè)置叠赐,但您可以使用外部工具找到最佳質(zhì)量,例如jpeg-archive

存在多種方法屡江,都可以用于測定壓縮圖像與原圖像的相似度或視覺感知差異度芭概。一些圖像質(zhì)量研究經(jīng)常會使用像SSIM(結(jié)構(gòu)相似性)這樣的方法。然而惩嘉,Guetzli則是通過優(yōu)化Butteraugli的方法來實現(xiàn)的罢洲。

Butteraugli

Butteraugli是一個來自Google的項目,它可以估算一個人可能會注意到兩個圖像的視覺降級(即心理視覺相似性)的點文黎,并給出幾乎沒有區(qū)別的兩個圖像的比對分?jǐn)?shù)惹苗。Butteraugli不僅給出一個標(biāo)量的分?jǐn)?shù)殿较,而且還會計算出圖像差異水平的空間圖。所以當(dāng)SSIM專注于計算圖像中差異的總和時鸽粉,Butteraugli則更專注于差異最明顯的部分斜脂。

Modern-Image14.jpg

上圖是一個例子:使用Butteraugli找到用戶無法注意到視覺差異的最小質(zhì)量閾值。并且縮小了65%的文件體積触机。

在真正的實施中帚戳,您將會制定一個圖像質(zhì)量的目標(biāo),然后運行一些不同的圖像優(yōu)化策略儡首,查看您的Butteraugli分?jǐn)?shù)片任,然后再找到合適的文件大小與質(zhì)量級別的最佳平衡點。

Modern-Image15.jpg

總而言之蔬胯,我花費了30分鐘來安裝Butteraugli到我的Mac上对供,包括安裝Bazel和編譯C++的源碼。使用它就非常簡單了:選擇兩個圖片(一個原圖和一個壓縮版本)進(jìn)行比較氛濒,它就會給你一個比較分?jǐn)?shù)产场。

Butteraugli與其他視覺相似度比較算法有什么不同?

[根據(jù)一位Guetzli項目成員的這條評論表明舞竿,Guetzli在Butteraugli得分最高京景,但在SSIM和MozJPEG得分也最差。其實骗奖,這是符合我自己對圖像優(yōu)化策略的研究的确徙。我會運行Butteraugli和一個Node模塊(如img-ssim)比較在使用了Guetzli、MozJPEG的之前和之后执桌,源圖像和壓縮圖像的SSIM分?jǐn)?shù)鄙皇。

組合編碼器?

對于一些較大的圖像仰挣,我發(fā)現(xiàn)將Guetzli與MozJPEG中的無損壓縮(jpegtran伴逸,而不是cjpeg,避免丟掉了Guetzli完成的工作)結(jié)合起來使用膘壶,可以將文件大小再減少10~15%(總體55%)违柏,并且只有非常小的SSIM評分損失。我只是提醒一下可以在組合使用編碼器方面進(jìn)行一些試驗和分析香椎,但是也受到了Ariya Hidayat等業(yè)內(nèi)其他人的好評漱竖。

總結(jié)來說,MozJPEG是一個初學(xué)者友好的網(wǎng)頁資源編碼器畜伐,速度相對較快馍惹,可以生成高質(zhì)量的圖像。而Guetzli則是一個資源密集型的編碼器,它在較大万矾、更高質(zhì)量的圖像上效果最好悼吱,是我建議給中高級用戶的一個好選擇。

下一篇:【譯】重要的圖像優(yōu)化之五:什么是WebP良狈?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末后添,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子薪丁,更是在濱河造成了極大的恐慌遇西,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件严嗜,死亡現(xiàn)場離奇詭異粱檀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漫玄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門茄蚯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睦优,你說我怎么就攤上這事渗常。” “怎么了汗盘?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵皱碘,是天一觀的道長。 經(jīng)常有香客問我衡未,道長,這世上最難降的妖魔是什么家凯? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任缓醋,我火速辦了婚禮,結(jié)果婚禮上绊诲,老公的妹妹穿的比我還像新娘送粱。我一直安慰自己,他們只是感情好掂之,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布抗俄。 她就那樣靜靜地躺著,像睡著了一般世舰。 火紅的嫁衣襯著肌膚如雪动雹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天跟压,我揣著相機(jī)與錄音胰蝠,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛茸塞,可吹牛的內(nèi)容都是我干的躲庄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钾虐,長吁一口氣:“原來是場噩夢啊……” “哼噪窘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起效扫,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤倔监,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荡短,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丐枉,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年掘托,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘦锹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闪盔,死狀恐怖弯院,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泪掀,我是刑警寧澤听绳,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站异赫,受9級特大地震影響椅挣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塔拳,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一鼠证、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靠抑,春花似錦量九、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至载城,卻和暖如春肌似,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诉瓦。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工闺金, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摸航。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓屹堰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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