安卓图片反复压缩后为什么会普遍会变绿?
来源:互联网 发布:网络火词2016 编辑:程序博客网 时间:2024/04/29 11:39
图片变绿是安卓系统一直以来的问题,直到 Android 7才修复。原因是安卓系统内部的一个核心部件的代码,为了优化手机上运行的速度——写错了 = =。
问题出在 Android 提供的压缩图片接口上,准确的说是一个 Android 里一个叫做 Skia 的库上。问题出在 RGB 色彩空间转换到 YUV 的时候。但问题不仅仅是精度下降,最大的问题是,错误的舍入(向下取整)。
现在就要说到 Android 系统到底为什么出了这个问题了。Android 系统自起诞生以来就引入了名为 Skia 的图像库(Google 自家产品),用于处理图像,其中包括把图片压缩成 JPEG(平时说的 JPG)。而 Skia 又是调用libjpeg-turbo 来实现真正的压缩过程的。为了达到更好的压缩效果,JPEG 算法本身,将通常屏幕上表示颜色的 RGB(红绿蓝)数值,转换为 YUV 数值(亮度,蓝色分量,红色分量)。正常情况下这个算法是轻微有损的。
但是 Skia 不走寻常路,在将这个变换算法的各个常数复制到自己的代码里的时候(当然是合法地),降低了精度,以达到更高的速度(专业准确地说,从 16 位定点数,降低到了 8 位定点数),这导致了更大的损伤。
最可怕的是……在进行这个变换运算的最后一步,需要除以 256,而代码中,采用了右移操作代替除法以提高执行速度。
## 假如我们是 Skia开发者,如何修复这个问题?
交回给 libjpeg-turbo 库自己来做色彩空间变换,把原本 Skia 库 YUV 转换代码全部删掉了,把这个过程留给整个过程最底层的 libjpeg-turbo库自己来做,并且用默认的 JDCT_ISLOW 方法代替JDCT_IFAST 方法。
- 安卓图片反复压缩后为什么会普遍会变绿?
- 为什么图片反复压缩后会普遍会变绿而不是其他颜色?
- 安卓图片压缩
- 安卓压缩图片
- 安卓图片压缩
- 安卓图片压缩
- 安卓图片压缩
- 安卓压缩图片
- 为什么图片裁剪后尺寸会变大
- 安卓图片压缩技术(质量压缩和比例压缩)
- 安卓压缩图片(解决OOM)
- 安卓图片压缩技术总结
- 安卓图片压缩---转载博客
- 微软为什么会让诺基亚生产安卓手机?
- 安卓面试必问二为什么会有消息机制
- 安卓设置默认应用功能失效,设置后仍然总是反复提示选择默认使用的应用
- 安卓手机普遍存在的2个问题
- 一些手机图片压缩处理后会出现旋转问题(三星)的解决方法
- 集合List中的批量删除
- 自动行为操控Steering(六)—逃避(与拦截方向相反,单体操控)
- 一个链表中包含环,请找出该链表的环的入口结点。
- 广东柏文带你走进化妆品OEM的“望闻问切”
- 性能测试常见用语
- 安卓图片反复压缩后为什么会普遍会变绿?
- 普适性的视觉感知与运动感知
- poj2983&&poj1364
- Android6.0 权限后编辑头像功能
- 【云隐课堂】【软件安装】Source_Insight3.5安装步骤
- 如何系统的学习 Unity 3D 中的 shader 编写(nvidia cg 编程)?
- JavaScript 的Image对象、图像渲染和浏览器缓存
- C语言 函数递归
- 项目联调服务器问题汇总