安卓平台文字叠加库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

编译

cdfreetype-2.11.1,更改build_android.sh里面的NDK环境为自己的编译环境,包括NDK_PATHHOST_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的编译的主要内容,如果未能解决你的问题,请参考以下文章

安卓平台文字叠加库freetype的编译

golang基础--image/draw渲染图片利用golang/freetype库在图片上生成文字

微信公众平台编辑一行文字的背景图片要如何做

qt使用freetype给图片添加字符

iOS使用OpenGLES和freetype绘制字体

FreeType - 纹理图集 - 为什么我的文字渲染为四边形?