美文网首页
jepg图像引擎实现超过原生的图片压缩性能

jepg图像引擎实现超过原生的图片压缩性能

作者: flynnny | 来源:发表于2021-04-22 00:35 被阅读0次

    以下都以8.0为例:
    真正加载bitmap是靠对象的long mNativePtr指向native中的地址
    Bitmap只有createBitmap 而没有new方法。

    1.png

    在系统源码里(8.0)/frameworks/base/core/jni/android/graphics/Bitmap.cpp查看

    像素存放在哪里?Native堆

    像素是由Bitmap.cpp加载吗?不是,而是SkBitmap

    SkBitmap有一个skia引擎,可以调用GPU代码。

    2.png 3.png

    Flutter框架、谷歌浏览器 都用的skia

    skia缺点:压缩差,文件非常大:ios 2M的图片,android 6M才能媲美。

    skia封装了jpeg ;类似restfit与okhttp

    传统压缩方式(原生):
    1、bitmap.compress(...);
    2、也可以尺寸压缩:大小减小到原来的1/10

    jpeg图像引擎实现:
    skia本身是没有使用哈夫曼的:

    7.png

    举例:


    4.png

    微信发送图片(压缩与未压缩)差别不大 大小差很多:原来有340K ,压缩后有41K

    尺寸压缩完,内容模糊

    质量压缩:完全失真

    "压缩.jpg"是我们的代码生成的

    实现:

    5.png

    使用jpeg压缩,哈夫曼压缩条件 元数据--》不能再分割
    bitmap是元数据吗?不是,A_R_G_B 4个字节

    所以要取出argb一整张图片放到数组里。

    6.png

    相关文章

      网友评论

          本文标题:jepg图像引擎实现超过原生的图片压缩性能

          本文链接:https://www.haomeiwen.com/subject/vedtrltx.html