【譯】重要的圖像優化之四:“素人”JPEG下

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

目錄

正文:

JPEG的壓縮模式(接上文

使用JPEG優化編碼器

現代化的JPEG編碼器會嘗試生產出更小更高保真的JPEG文件,同時保持與現有瀏覽器以及圖像處理應用程序的兼容性。它們避免了在運行的系統中引入新的圖像格式而帶來一系列變化,并給圖像優化壓縮帶來質的變化。這里就有兩個這樣的編碼器,它們是MozJPEG和Guetzli。

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

  • 一般使用MozJPEG
  • 如果你的核心關注點是圖像質量,而且不在乎相對較長的編碼時間,則使用Guetzli
  • 如果你需要更好的可配置性:
  • JPEGRecompress (底層使用了MozJPEG)
  • JPEGMini:它類似于Guetzli會自動選擇最佳質量。但它不如Guetzli技術復雜,而且更快,其目標是在于更適用于網絡的最佳質量圖像。
  • ImageOptim API這里還有個免費的在線界面):它的顏色處理機制是獨一無二的,您可以分開選擇顏色質量與整體質量。另外,它可以自動選擇色度抽樣級別,以便在屏幕截圖中保留高分辨率顏色,并避免了在自然照片中平滑色彩的字節浪費。

什么是MozJPEG?

MozJPEG是Mozilla開源提供的現代化的JPEG編碼器。它聲稱要去除JPEG文件的10%左右的體積。使用MozJPEG壓縮的JPEG文件可以跨瀏覽器顯示,并且還包括漸進式掃描優化、網格量化(丟棄最少壓縮的細節)以及一些優秀的量化預設等功能,可以幫助創建更平滑的高分辨率圖像(當然也可以使用ImageMagick,如果你愿意去瀏覽XML配置)。

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

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:不同質量的文件體積與視覺相似度得分的比較。

我用來自jpeg-archive項目的jpeg-recompress來計算一個源圖像的SSIM(結構相似性)分數。SSIM是一種用于測量兩個圖像之間的相似性的方法,其中的分數就是一個圖像對比另一個圖像的“完美”相似測量值。

根據我的測量結果,MozJPEG的確是一個很好的選擇,它可以保持高視覺質量來壓縮網頁的圖像,同時減少文件的大小。對于中小型圖像,我發現MozJPEG(質量= 80-85)可以將文件大小減少30-40%,同時保持可接受的SSIM,在jpeg-turbo庫上可以提高了5-6%讀取速度。MozJPEG確實要比基線JPEG編碼更慢,但這不足以成為你放棄它的理由。

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

什么是Guetzli?

Guetzli是一個來自谷歌的、有前景的、有些緩慢的感知型的JPEG編碼器,它會試圖找到一個人眼在視覺上無法區分差異但卻體積最小的JPEG文件。Guetzli會執行一系列感知測試,為最終的JPEG提出方案,并對每個方案進行評估。最終在其中選擇最高評分的提案作為最終輸出。

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

注意: 圖片文件的大小更多取決于你圖片的質量,而非使用的編解碼器。與通過切換編解碼器實現的文件大小節省相比,最低質量和最高質量JPEG之間的文件大小差異要更大的多。因此,設置最低可接受的質量非常重要。避免將您的質量設置得太高,并且不去關注它。

Guetzli 聲稱當在Butteraugli得到同樣的質量評分的情況下,和其他編碼器相比可以將數據體積再減小20-30%。使用Guetzli的一個大問題就是,它非常非常慢,目前只適用于靜態內容的優化。從它的說明中可以看出,Guetzli需要大量的內存(每百萬像素可能需要1分鐘+ 200MB的內存)。這里有一個很好的Guetzli實踐測試報告??梢钥吹?,Guetzli可以作為你的靜態網站構建過程中圖片優化的理想拼圖,但是在按需執行時就并不合適了。

注意:當您將圖像優化作為靜態網站的構建過程的一部分時,Guetzli可能更加適用,或者在不需要按照要求執行圖像優化的情況時。

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

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

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

Modern-Image13.jpg

Guetzli:不同質量的文件體積和視覺相似度得分的比較。

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

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

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

MozJPEG與Guetzli孰優孰劣?

比較不同的JPEG編碼器是很復雜的 —— 它需要比較壓縮圖像的質量、保真度以及最終文件大小等多項內容。正如圖像壓縮專家KornelLesiński指出的那樣,僅就單方面而非多個角度進行測試比較,很可能會導致一個無效的結論。

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

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

存在多種方法,都可以用于測定壓縮圖像與原圖像的相似度或視覺感知差異度。一些圖像質量研究經常會使用像SSIM(結構相似性)這樣的方法。然而,Guetzli則是通過優化Butteraugli的方法來實現的。

Butteraugli

Butteraugli是一個來自Google的項目,它可以估算一個人可能會注意到兩個圖像的視覺降級(即心理視覺相似性)的點,并給出幾乎沒有區別的兩個圖像的比對分數。Butteraugli不僅給出一個標量的分數,而且還會計算出圖像差異水平的空間圖。所以當SSIM專注于計算圖像中差異的總和時,Butteraugli則更專注于差異最明顯的部分。

Modern-Image14.jpg

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

在真正的實施中,您將會制定一個圖像質量的目標,然后運行一些不同的圖像優化策略,查看您的Butteraugli分數,然后再找到合適的文件大小與質量級別的最佳平衡點。

Modern-Image15.jpg

總而言之,我花費了30分鐘來安裝Butteraugli到我的Mac上,包括安裝Bazel和編譯C++的源碼。使用它就非常簡單了:選擇兩個圖片(一個原圖和一個壓縮版本)進行比較,它就會給你一個比較分數。

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

[根據一位Guetzli項目成員的這條評論表明,Guetzli在Butteraugli得分最高,但在SSIM和MozJPEG得分也最差。其實,這是符合我自己對圖像優化策略的研究的。我會運行Butteraugli和一個Node模塊(如img-ssim)比較在使用了Guetzli、MozJPEG的之前和之后,源圖像和壓縮圖像的SSIM分數。

組合編碼器?

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

總結來說,MozJPEG是一個初學者友好的網頁資源編碼器,速度相對較快,可以生成高質量的圖像。而Guetzli則是一個資源密集型的編碼器,它在較大、更高質量的圖像上效果最好,是我建議給中高級用戶的一個好選擇。

下一篇:【譯】重要的圖像優化之五:什么是WebP?

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

推薦閱讀更多精彩內容