php imagick加GD实现gif图换脸动画生成表情包制作功能

需求讲解

最近公司需要开发一款gif图生成人脸表情包功能,人脸PNG图跟gif图合成新的gif,保持原来频率运动, 说白了就是一个PNG放在GIF的指定位置,并且跟随GIF运动,看一下这个GIF
在这里插入图片描述

摸索过程问题汇总

人脸PNG图跟gif图合成新的gif,保持原来频率运动,着实犯难了几天,本来对gif图处理的能力就弱,查资料GD库对GIF图的操作能力偏弱,雪上加霜,后来了解到PHP Imagick扩展对GIF图的操作能力强, 开始操作后遇到各种问题, 最大的俩点 : 人脸跟GIF图合成后人脸图不运动问题、人脸图在GIF图中位置问题… 真的是操碎了心,哎!

用到的技术

1. face++ 人脸识别 旷世家的免费识别图片中是否存在人脸并返回位置
2. GD库   裁剪图片中的人脸 根据face++返回的位置进行裁剪、每帧GIF和人脸图片合成新图png、图片画圆
3. Imagick 识别原GIF图延迟时间、多张png合成新的GIF设置延迟时间

实现思路

UI工作: 需要将每个GIF图拆分成每一帧,并记录每帧图片中需要存放人脸的位置 : 左 上 位置宽度 位置高度 存放到数据库, 这里重点说一下 开始的时候用的Imagick 自动拆分GIF每一帧,但是图片中存放人脸的位置 实在找不出来,不晓得用什么技术,所以麻烦UI兄弟给拆好,量出每一帧的位置, 哪位大神有办法可以告知一下子

后端工作: 利用face++ 识别出人脸位置 GD裁剪并画圆(我们设计的人脸位置都是椭圆所以没有过多检测) GD把人脸图按照GIF每帧图的位置合成新的图片 Imagick把新图片合成GIF

体验一下效果

小程序搜索 菠萝孕育 工具箱中有 表情包
在这里插入图片描述

代码这里就不过多粘贴,因为还需要整理, 需要代码的码友可以联系我, 如有问题请多指教


版权声明:本文为lifei15731208550原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。