图片压缩
背景
成像系统两大核心: 镜头+感光元器件
底大一级压死人
小米11发布会上:
一般全画幅单反/微单相机,厂家设置的有效像素为2400万像素 cmos面积:864mm2 每平方毫米上2.78个像素
asp-c 有效像素为2400万像素 cmos面积 332.3mm2 每平方毫米上7.23个像素
华为mate40 pro 1/1.28英寸 5000万像素,常用1000w像素 cmos面积192.11mm2 每平方毫米26个/5.2个像素
如果按全画幅单反的解析度,华为mate40 pro 应该配500万像素,而不是5000万.
小米10 pro 1/1.33英寸 (15.28mmx11.46mm) 一亿像素 cmos面积175.09mm2 每平方毫米上57个像素
(1英寸约等于25.4mm)
从数值上看,手机1000w像素拍出来的放到最大,效果应该和asp-c 2400万像素放到最大的效果差不多
but: 细节见功夫
放大到100%, 手机拍照的效果比相机差太多了.不是一个档次
压缩算法/图片格式
gif:动图格式,兼容性好,画面质量较差.
png: 可带透明通道.文件偏大.无损压缩.
jpeg:无与伦比的兼容性,非常不错的压缩比. 有损压缩.
webp: 谷歌主推,没有流行起来
Guetzli: 谷歌出的玩具算法,以更高的压缩比压成jpg格式,但极度耗内存和cpu,基本不具有工业价值.
hevc/heif: h.265对应的图片压缩算法,有版权问题. 腹死胎中,只有苹果玩了几个版本.
avif: h.266对应的图片压缩算法,全开源. 压缩比超高,不惧反复压缩.各巨头火热开发中,很有前景.
质量压缩
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
quality: 取值0-100.
一般来说,手机/相机拍照的质量为96,98.
其实肉眼看,80和100并无明显差别.
用于存硬盘收藏的图片,推荐80-90
用于聊天,晒朋友圈之类的上传,推荐70
用于跑算法模型的上传,具体看算法的要求. 可以使用80-90的webp
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dnEqLofi-1625658189921)(/Users/hss/Library/Application Support/typora-user-images/image-20210322174334485.png)]
图片的缩与放
向下采样 向上插值
相关算法:
-
单线性/最近邻: 速度最快,但可能失真,有明显锯齿
-
双线性
-
双三次/双立方
-
Lanczos
其中,Android只实现了单线性和双线性.
且直接读流的向下采样时,只支持单线性采样.
缩小: 向下采样:
放大: 向上插值
Android里的单线性/双线性操作:
从流中解码bitmap:
BitmapFactory.Options options = new BitmapFactory.Opt