为什么那些比较粗糙画质的表情包经常背景发绿?

推荐  (0) | 5人关注关注
4个答案
0 0

百度压缩图像导致图像发绿,就像这些,如果你的图像来自百度,就会这样

0 0

给一个最简单的回答吧:

JPEG图像是压缩图像。普通图像转化成JPEG图像会被压缩。

常规的图片比如BMP图片,存储的方式是:R0-255,G0-255,B0-255,这三个数字分别代表了红绿蓝的颜色,混合在一起就构成了24位真彩色。

而JPEG的图片使用的不是红绿蓝,而是亮度、红、蓝。亮度*3减去红蓝就是绿。然而JPEG是个压缩算法,有些时候,为了节约空间它还会把一部分的点揉吧揉吧放一块,亮度差不多的都设置成一样的(反正差个10-20点人眼是看不出来的)

最后误差逐渐累计,渐渐的就绿了。


一个例子:(例子不代表JPEG的实际工作方式,压缩算法等也用了明显的错误夸大)




现在有个图,只有三个点,一个是暗红,一个是暗绿,最后一个是接近纯蓝色。

这两个点的数据是:120 0 0,0 120 0和0 0 254

现在转化成亮度模式:40 120 0,40 120 0,84.66666... 0 254

好了,前两个都没什么大问题,但是第三个问题来了:图片存储是不允许小数的

只能四舍五入成85 0 254

现在这三个点发生了如下的变化:

纯红 : 没变 120 0 0

纯绿: 没变 0 120 0

接近纯蓝: * 变绿了* 0 1 254



接下来,压缩:(压缩算法非常多也非常复杂我就随便说说)

图片一共就三个点,他们的亮度分别是40 40 85

为了节省空间,我们用两个数字来保存他们:55 25。

这两个数字表示:中位数是55, 斜率是25,代表一个亮度序列:30 55 80

看起来和40 40 85不差多少是吧?

现在,图片变成了:

红点:30 120 0

绿点:55 0 0

蓝点:80 0 254

再转化回RGB模式:

红点:120, -30, 0(不能有负数,所以是120 0 0)没变


绿点:0 165 0 从120 变成了165,变绿了

蓝点:0 0 254 没变


于是整幅图整体上变绿了15点。

而随着多次的重复压缩和重复转换,绿的部分更绿,红蓝也渐渐被绿色渗透

最终图就绿透了。

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2015] 0609-239号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区