今天簡單的試用了一下 cweb.exe 將 jpg, png 格式的圖片轉換成 webp 格式。
我今天下載的是當前最新版:1.0.0
cwebp 3.jpg -q 85 -o 3.webp
發現圖片中的女模特原來粉紅色的指甲顏色有失真的情況:變暗了。
這個情況與使用 ffmpeg 將多張jpg圖片生成 mp4 視頻的時候出現的顏色失真有點類似。
jpg格式:
轉換成webp格式后:
百度了一下 webp 顏色失真,找了一篇關於顏色失真的討論,但沒有答案:http://www.cocoachina.com/bbs/read.php?tid=332365
圖片上傳到服務器不能太大,所以先做等比例壓縮,但是壓縮后再轉webp圖片就變色。求大家指教。。。。
ps:不管裁剪,壓縮,轉webp后都會變色,只有原圖轉才沒問題
另外一篇提到:http://weixin.niurenqushi.com/article/2017-05-23/4859725.html
因為 JPEG 采用的色彩格式是 YUVJ420P,對應的色彩區間是 0-255,而 WebP 采用的色彩格式是 YUV420P,對應的色彩區間是 16-235,也就是說如果單純的轉碼,會丟失 0-15,236-255 的色彩,也就是出現了色差。 雖然從產品角度來看,這樣的色差是可以容忍的,但是從技術角度,我們當然是希望可以有解決色差的方法,進一步跟進發現,cwebp 提供了一個 “-metadata” 的參數,
可以將原圖的額外信息復制到 WebP 圖像上,雖然會增加額外的存儲空間,但是可以保證視覺體驗與原圖一致,並且增加的空間也僅限於保存原圖的額外信息那一部分。 通過增加 "-metadata all", 轉碼后的 WebP 圖像消去了色差 該參數有 “all, none, exif, icc, xmp” 五種可選項,默認是 none,支持 exif, icc, xmp 三種類型或其任意組合的信息保留,
例如,上述 JPEG 原圖額外信息正是 ICC Profile 信息,可以使用 "-metadata icc" 或者 "-metadata all" 保證轉碼質量。
但是我測試 -metadata all ,發現還是存在色差問題。
google了一下,找到一篇:https://groups.google.com/a/webmproject.org/forum/#!topic/webp-discuss/TtX0JB-kyUE
下面摘取了一部分內容:
'cwebp'的默認編碼參數是使用有損編碼。 這意味着源圖像和壓縮圖像之間的小的(希望無法察覺的)差異是不可避免的。當提升-q參數值時,差異在幅度上越來越小。 盡管如此,即使在q = 100時,也可以得到+/- 1的差異(主要是因為顏色空間轉移:RGB < - > YUV,這會產生一些舍入誤差)。 如果壓縮為JPEG格式,您會遇到類似的差異。
當使用 -lossless 選項時,顏色失真不會發生。
但是生成的webp文件很大。
2018-10-10
https://bugs.chromium.org/p/webp/issues/detail?id=232
-pre 4 或 -sharp_yuv 效果好多了,色差就不顯的那么明顯了。
但是另一張圖片上的粉紅色的文字還是有明顯的色差。
webp格式:https://img.alicdn.com/tps/i3/0/TB2flVsaOMnBKNjSZFCXXX0KFXa_!!0-juitemmedia.jpg_800x800q90.jpg_.webp
jpg格式:https://img.alicdn.com/tps/i3/0/TB2flVsaOMnBKNjSZFCXXX0KFXa_!!0-juitemmedia.jpg_800x800q90.jpg