安卓平台文字叠加库freetype的编译
Posted 「已注销」
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓平台文字叠加库freetype的编译相关的知识,希望对你有一定的参考价值。
freetype是一款跨平台开源的文字叠加库,支持对图像,视频进行文字叠加.
做多媒体开发的小伙伴大概都知道文字叠加是个刚需.所以最近研究了一下freetype库在安卓平台的编译过程.
下载
freetype 可在https://freetype.org/download.html
下载,目前最新版本是2.11.1.
配置
freetype是一个标准的GNU Autotools生成的项目.其原理是:1 使用configure生成Makefile,2 make. 我们这里要做的就是修改configure的输出参数,来适配到安卓平台.
我借鉴了一些第三方的配置项目,创建了build_android.sh
脚本,过程略过,内容如下.
具体见freetype-2.11.1/build_android.sh
:
#!/bin/bash
FFMPEG_EXT_PATH=`pwd`
NDK_PATH="/Users/pro21/Downloads/android-ndk-r21e/"
HOST_PLATFORM="darwin-x86_64"
ENABLED_DECODERS=("$@:4")
JOBS=$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)
echo "Using $JOBS jobs for make"
COMMON_OPTIONS="
--with-zlib=no
--with-bzip2=no
--with-png=no
--with-harfbuzz=no
--with-brotli=no
--with-sysroot=$SYSROOT
"
TOOLCHAIN_PREFIX="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/bin"
SYSROOT="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/sysroot"
cd "$FFMPEG_EXT_PATH"
make clean
FOLDER=`pwd`/android-libs/armeabi-v7a
mkdir -p $FOLDER
CC=$TOOLCHAIN_PREFIX/armv7a-linux-androideabi16-clang \\
./configure \\
--prefix=$FOLDER \\
--libdir=$FOLDER \\
--host=arm-linux-androideabi \\
--enable-neon --enable-thumb --disable-gpl --disable-nonfree --enable-runtime-cpudetect \\
$COMMON_OPTIONS
make -j$JOBS && make install
make clean
FOLDER=`pwd`/android-libs/arm64-v8a
mkdir -p $FOLDER
CC=$TOOLCHAIN_PREFIX/aarch64-linux-android21-clang \\
./configure \\
--prefix=$FOLDER \\
--libdir=$FOLDER \\
--host=aarch64-linux-android \\
--enable-debug \\
$COMMON_OPTIONS
make -j$JOBS && make install
make clean
FOLDER=`pwd`/android-libs/x86
mkdir -p $FOLDER
CC=$TOOLCHAIN_PREFIX/i686-linux-android16-clang \\
./configure \\
--prefix=$FOLDER \\
--libdir=$FOLDER \\
--host=i686-linux-android \\
$COMMON_OPTIONS
make -j$JOBS && make install
编译
cd
到 freetype-2.11.1
,更改build_android.sh
里面的NDK
环境为自己的编译环境,包括NDK_PATH
和HOST_PLATFORM
,然后执行:
sh build_android.sh
编译成功后,动态库位于android-libs
目录.
编译Android JNI
- cd 到 android/library/freetype_jni
- 执行 ndk-build
测试项目
通过AS打开安卓项目,执行测试代码:
android/library/src/androidTest/java/com/tsinglink/android/library/TextDrawTest.kt
安卓端接口调用
// 创建 TextDraw 实例
val draw = TextDraw()
// 设置字库,文字大小,旋转角度:
draw.init("/system/fonts/NotoSansCJK-Regular.ttc",20,0.0f)
// 在20,120处叠加文字. frame为叠加的图像帧,YUV格式.width,height表示图像帧的宽高
// draw方法可以多次调用.
draw.draw("你好 hello ", 20, 120, frame, width, height)
// 释放实例
draw.release()
叠加效果展示
draw.draw("""Log.i(TAG,"你好 hello ")""", 20, 30, frame, width, height)
draw.draw("""Log.i(TAG,"こんにちは hello ")""", 20, 60, frame, width, height)
draw.draw("你好 hello ", 20, 120, frame, width, height)
draw.draw("こんにちは hello ", 20, 150, frame, width, height)
项目地址
https://github.com/tsinglink/android-freetype
以上是关于安卓平台文字叠加库freetype的编译的主要内容,如果未能解决你的问题,请参考以下文章