深入了解安卓图片优化到底是个什么东西

2020-05-02  本文已影响0人  仕明同学

图片压缩

好处:节约用户流量,降低服务器的带宽,降低App的内存使用
分类:质量压缩,尺寸压缩

尺寸压缩之邻近采样

临近采样:是基于邻近点插值算法实现的,会根据相对位置取一个像素代替原图几个像素

        val option=BitmapFactory.Options()
        //采样率
        option.inSampleSize=1
        val bitmap=BitmapFactory.decodeResource(resources,R.mipmap.demo,option)
        mImageView.setImageBitmap(bitmap)
demo.png

尺寸压缩之双线性采样

双线性采样:采用双线性插值算法,会根据相对位置取一个像素点替换掉几个像素,其实就是周围的 2*2的点

  val bitmap1 = BitmapFactory.decodeResource(resources, R.mipmap.demo)
        val bitmap2 = Bitmap.createScaledBitmap(bitmap1,bitmap1.width/2,bitmap1.height/2,true)
        mImageView.setImageBitmap(bitmap2)

质量压缩:SKia 图形引擎 libjpeg,这种会把图片生产新的,同时放在本地,通过BitmapFactory.decodeFile 去加载本地图片

quality 0-100 ,0代表质量越小,100越大,

        //最好把这个图片copy到本地区,这样就能够看到真正质量的却别 
        val byteArrayOutputStream = ByteArrayOutputStream()
        val compress = bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)

假如一张图片的质量在80k,那么通过这种方式的压缩的结果 webp-2k png-50k jepg-10k,所以webp是最优的结果,其实如果压缩的是PNG格式的话,改变quality的时候,压缩的大小其实不会改变,这点注意

skia

skia 这是开源的

skia 已被应用于AndroidGoogle ChromeChrome OSChromium OSMozilla FirefoxFirefox OS以及Sublime Text

2012年时Skia有大概80,000行程式码,以C++开发而成,所以牛逼呀,我们写个80000行代码,都是面向白的CV工程师,哈哈,我写到这里我自己都笑了

两种算法 定长算法和哈夫曼:libjpeg在压缩图片使用的就是这种算法,我其实也说不清哈,这个算法需要的请详细了解

image.png image.png
image.png

最后

上一篇下一篇

猜你喜欢

热点阅读