libjpeg-turbo
libjpeg是专门处理Jpeg解码、编码、转码的自由软件库。libjpeg-turbo是其fork版本,还有一个基于libjpeg-turbo的fork的版本是MozJpeg。
个人理解,3者的区别和优势:
libjpeg 功能全面强大持续更新特性
libjpeg-turbo 基于精简指令集优化,以及编码算法优化,速度号称可以达到2-4x的libjpeg的编解码速度。Android机型实际测试速度基本在2x,图像质量持平。
MozJpeg 基于libjpeg-turbo,长于编码文件能达到10%的优化。但是编码耗时长。4k图片在vivo NEX S上编码在5s+。
编译
目前libjpeg-turbo最新版本在2.0.1。编译方式也不同于之前的1.5.x版本。官方在BUILDING.md有具体说明。比如 Android armv7a版本如下:
# Set these variables to suit your needs
NDK_PATH={full path to the "ndk" directory-- for example, /opt/android/sdk/ndk-bundle}
BUILD_PLATFORM={the platform name for the NDK package you installed--
for example, "windows-x86" or "linux-x86_64" or "darwin-x86_64"}
TOOLCHAIN_VERSION={"4.8", "4.9", "clang3.5", etc. This corresponds to a
toolchain directory under ${NDK_PATH}/toolchains/.}
ANDROID_VERSION={The minimum version of Android to support-- for example,
"16", "19", etc.}
# It should not be necessary to modify the rest
HOST=arm-linux-androideabi
SYSROOT=${NDK_PATH}/platforms/android-${ANDROID_VERSION}/arch-arm
export CFLAGS="-march=armv7-a -mfloat-abi=softfp -fprefetch-loop-arrays \
-D__ANDROID_API__=${ANDROID_VERSION} --sysroot=${SYSROOT} \
-isystem ${NDK_PATH}/sysroot/usr/include \
-isystem ${NDK_PATH}/sysroot/usr/include/${HOST}"
export LDFLAGS=-pie
TOOLCHAIN=${NDK_PATH}/toolchains/${HOST}-${TOOLCHAIN_VERSION}/prebuilt/${BUILD_PLATFORM}
cd {build_directory}
cat <<EOF >toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER ${TOOLCHAIN}/bin/${HOST}-gcc)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/${HOST})
EOF
cmake -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake \
-DCMAKE_POSITION_INDEPENDENT_CODE=1 \
[additional CMake flags] {source_directory}
make
按照上面的模板其实就可以编译。但是要注意点是cmake得配cmake官方下载的版本,而不是Android 编译NDK下载的cmake。看网上有人用android的cmake编译,实际试过只有x86_64版本成功了,其他版本有各种的问题。
实际可运行的脚本可以参考,然后再根据自己需要再行更改就好了。
https://blog.csdn.net/zy_zhangyuan88/article/details/82701681
其中获取MAC的cmake地址可以参考
https://blog.csdn.net/baimafujinji/article/details/78588488
网友评论