android cmake 打印_Android使用CMAKE编译libjpeg

本文介绍了如何使用CMAKE在Android上编译libjpeg-turbo库以解决Bitmap.compress()方法压缩图片质量下降的问题。通过编译libjpeg-turbo,可以提高JPEG压缩效率,避免图片模糊和色彩失真。详细步骤包括源码下载、NDK配置、CMakeLists编写以及Java层调用原生方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍使用 CMAKE 编译 libjpeg-turbo 类库,本文相关代码请在GitHub-TurboJpegSample 查看。

libjpeg-turbo 附GitHub 地址,libjpeg-turbo 是个运用极其广泛的库,可以说,基本上电脑上手机上能见到的 JPEG 压缩的地方用的一般都是 libjpeg-turbo,本文只介绍使用了图片压缩的功能。

使用 Android 保存图片时,我们通常使用的是 Bitmap.compress() 方法,但是使用该方法时,就算 quality 设置为 100,图片质量还是会越来越模糊,颜色也会越来越绿~,至于为什么会这样,请看 知乎回答。 这个问题在贴吧上体现尤为明显,贴吧里面经常很多绿绿的图片就是因为大家保存下来上传上去,保存下来上传上去 … 导致质量越拉越低,我解压了 美图秀秀 和 in 的 apk 发现里面都引用了 libjpeg.so,所以这个应该是一个比较通用的解决方案。

我们对图片使用质量压缩时它的底层就是用 skia 引擎进行处理,如我们调用bitmap.compress(Bitmap.CompressFormat.JPEG...) 他实际会 使用一个libjpeg.so 的动态库进行编码压缩。android 在进行 jpeg 压缩编码的时候,考虑到了效率问题使用了定长编码方式进行编码(因为当时的手机性能都比较低),而 ios 使用了变长编码的算法——哈夫曼算法。而且 IOS 对 skia 引擎也做了优化,所以我们看到同样的图片在 ios 上压缩会好一点。

文档就整理到这里吧,其实上面说的都是看了一些博客的介绍然后进行了整理和记录,来清楚为什么我们需要自己来编译 so 实现图片压缩。

资源准备

我们需要下载源码编译出 libjpeg.so 来使用,clone 源代码。1git clone git://git.linaro.org/people/tomgall/libjpeg-turbo/libjpeg-turbo.git -b linaro-android

重命名根目录 libjpeg-turbo 为 jni,进入 jni 目录,首先你应该配置好 ndk, 使用 ndk-build 命令进行编译。1

2

3

4mv libjpeg-turbo jni

ndk-build APP_ABI=armeabi-v7a,armeabi

编译完成之后我们就可以获取到 libjpeg.so,目录如下:1

2

3

4

5

6

7

8

9

10jni

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值