Android中在图片上添加Lottie动态文字贴纸并保存至相册
Android平台Lottie动态贴纸叠加图片并导出方案
结论
完全可以实现将Lottie动画作为动态文字贴纸叠加在图片上,并导出为视频或GIF格式。你提到的先将Lottie转存为本地GIF再用FFmpeg处理的思路是可行且易落地的最优方案之一。
具体实现步骤
1. 把Lottie动画转成GIF文件
在Android上可通过两种方式生成GIF:
- 用Lottie官方扩展:引入
lottie-gif依赖后,直接调用LottieAnimationView.createGif()方法,指定输出路径和参数(帧率、尺寸)即可生成带透明通道的GIF。 - 手动逐帧渲染:通过
LottieDrawable获取每一帧的Bitmap,再用GIF编码库(如android-gif-drawable)将Bitmap序列拼接成GIF,保存到APP内部存储或外部私有目录。
注意:要保证GIF的尺寸、帧率和后续处理的背景图片匹配,避免拉伸或速度异常。
2. FFmpeg叠加处理与导出
导出为GIF
假设背景图片路径为/sdcard/input.jpg,Lottie生成的GIF路径为/sdcard/lottie_sticker.gif,输出GIF路径为/sdcard/output.gif,命令如下:
ffmpeg -loop 1 -i /sdcard/input.jpg -i /sdcard/lottie_sticker.gif -filter_complex "[0:v][1:v]overlay=x=100:y=100:shortest=1" -delay 10 -y /sdcard/output.gif
参数解释:
-loop 1:让静态背景图片循环播放,匹配GIF的时长overlay=x=100:y=100:设置贴纸在图片上的位置(x/y为左上角偏移量)shortest=1:输出时长取两个输入中较短的(即GIF的时长)-delay 10:控制GIF播放速度(单位1/100秒,10表示每帧停留100ms)
导出为MP4视频
如果需要导出视频,命令调整为:
ffmpeg -loop 1 -i /sdcard/input.jpg -i /sdcard/lottie_sticker.gif -filter_complex "[0:v][1:v]overlay=x=100:y=100:shortest=1" -c:v libx264 -r 25 -y /sdcard/output.mp4
参数解释:
-r 25:设置视频帧率为25fps,适配多数设备-c:v libx264:使用H.264编码,保证视频兼容性和压缩率
3. 保存到系统相册
处理完成后,需要触发系统媒体扫描:
- 通过
MediaScannerConnection.scanFile()方法扫描生成的文件,让系统相册识别; - 或者直接将文件写入
MediaStore.Images.Media或MediaStore.Video.Media的公共目录,无需额外扫描。
优化提示
- 若Lottie动画有透明效果,确保导出的GIF保留Alpha通道,FFmpeg的
overlay滤镜会自动识别透明区域,无需额外配置。 - 追求更高画质的话,可以将Lottie转成PNG序列帧,再用FFmpeg叠加序列帧,相比GIF能减少画质损失。
- Android上集成FFmpeg建议使用预编译库(如mobile-ffmpeg),省去自行编译的兼容性麻烦。
内容的提问来源于stack exchange,提问作者Aleksakb24
相关产品推荐
相关产品推荐

