https://books.google.com/books?id=fvSbCgAAQBAJpg=PA124lpg=PA124dq=jpeg+compress+turn+to+greensource=blots=HSbULDkU3ksig=ch5q_UsCNhZ7xuJfg4GITiNYlQ0hl=ensa=Xved=0ahUKEwiUy-eZpJ7KAhXIbT4KHbxgBgMQ6AEIUTAH#v=onepageq=jpeg%20compress%20turn%20to%20greenf=false (gfw認證資源) JPEG compression divides images into 8×8 blocks of pixels that are ... more blue and less green; turn up Cr and the screen becomes more red and less green.
應該是jpg壓縮。所謂有損的圖像壓縮都是減掉高頻部分,jpg是先小波變換,你可以理解為傅立葉變換,本質上是差不多的。然後剪掉高頻的部分,因為人眼對高頻部分相對不敏感。什麼是高頻的部分呢,就是圖片里的各種邊緣,顏色明暗變化比較激烈的地方。你的例子里就是文字邊緣。正因為這一部分的在頻譜上被去掉了,變換回時域就會在文字周圍產生失真。至於為什麼會變綠這個我就不太了解,我猜測和你的壓縮比太高有關。壓縮比過高導致頻譜丟失太多,失真已經蔓延到低頻區也就是大面積的白色背景。
這是 Android 圖像庫的一個 bug, 標準的 JPEG 在做色彩空間轉換的時候,會用至少 16 比特精度, Android 圖快只用了 8 比特。 這個 bug 同時也影響了 Chrome 瀏覽器。 這個問題在 Android 7.0 和 Chrome 52 里修復了。 參見 Use libjpeg-turbo for YUV-&>RGB conversion in jpeg encoder · google/skia@c7d01d3 · GitHub 想體驗的可以試試我寫的 JPEGreen Simulator
可能圖片自身就不是純白色,然後在壓縮的時候,不同壓縮的時候,會將相近的顏色轉化為同一種顏色,轉化的程度在於採用不同程度的色表。當採用不同色表反覆壓縮後,就可能在一次次壓縮中,使得顏色失真。至於偏綠,可能是色表本身演算法導致的問題吧 我又想了想,可能還和放大縮小的時候,採用的演算法導致出現其他顏色也有關係吧。 非專業,答案僅供參考
相似的是 多次轉載的新聞人像臉會變成一種很難看的洋紅
要看顏色是怎麼存的, 常見的RGB,純白色是紅綠藍全滿,怎麼都不會搞成綠色, 有些很高級的YUV之類的,存的是奇怪的亮度,色度什麼東西,這種東西壓縮起來人眼看著就有點詭異了, 以上顯然非專業回答……
這個綠色好熟悉,記得是以前常說的護眼綠,原圖就這樣吧?
推薦閱讀: