前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单三步做出微信h5表情包

简单三步做出微信h5表情包

作者头像
腾讯NEXT学位
发布2018-07-05 11:53:15
2.5K0
发布2018-07-05 11:53:15
举报
文章被收录于专栏:腾讯NEXT学位腾讯NEXT学位

在聊天中,表情占据了越来越重要的地位。它能够承载一些难以言说的情感,也让聊天显得更加生动活泼 。

项目实现:

选取mp4文件或摄像头录制生成微信GIF表情,可添加文字和特效(制作中)等功能。

流程图:

使用的工具: 

GIF编码:

https://jnordberg.github.io/gif.js/

代码语言:javascript
复制
只使用核心:GIFEncoder.js

Worker线程:

详见推送《JavaScript Worker 另类玩法

线程编码每个Frame,然后合并成GIF

文件选取、录像:

兼容IOS,安卓平台

代码语言:javascript
复制
var input_file = document.createElement("input");
    input_file.type = "file";
    input_file.multiple = false; //单选文件
    input_file.accept = "video/*";
    input_file.style.display = "none";    document.body.appendChild(input_file);
.....
input_file.onclick();//选择文件

数据采集:

选取文件:android和ios平台选取文件基本上一致。

录像兼容性:在video标签播放能正常识别正确的rotatio。

在Canvas上, 录像不管是横竖屏取得的视频文件roation已经旋转了90度,draw到canvas后

解决方案:

MediaInfo: https://github.com/buzz/mediainfo.js

只能读取视频的mediainfo信息,判断正确的roation

文件大小:7.1M,缺点js文件过大。

判断像素

判断右下角最后的像素是否有值和透明,如果无值和透明,证明视频rotation 90

代码语言:javascript
复制
let checkVideo= video=>{        var temp = tempCanvas        var scale = 320/video.videoHeight
        temp.width = scale *video.videoWidth;
        temp.height = scale * video.videoHeight;        var ctx = tempCanvas.getContext('2d');
        ctx.clearRect(0,0,temp.width,temp.height);
        ctx.drawImage(video,0,0,tempCanvas.width,tempCanvas.height);        var imgData=ctx.getImageData(0,0,tempCanvas.width,tempCanvas.height);        var len = imgData.data.length        if (imgData.data[len-4] ==0&&
            imgData.data[len-3] ==0 &&
            imgData.data[len-2]== 0 &&
            imgData.data[len-1] == 0)
      { 
        return true
      }else {        return false;
        }
  
}

mp4文件解析版:只支持mp4 mov 格式

旋转视频:

代码语言:javascript
复制
let drawRotatedImage = (ctx,image, x, y, angle,scaleX,scaleY)=> { 
    ctx.save();     
    ctx.scale(scaleX,scaleY);       
    ctx.translate(x, y);
    ctx.rotate(angle );
    ctx.drawImage(image, -(image.width/2), -(image.height/2));
    ctx.restore(); 
}

Encoder:

采集长度:4秒

采集间隔:150毫秒

尺寸大小:采集高宽适应在300*300

GIF编码参数:默认

设备

线程

总数

耗时(毫秒)

Frame耗时(毫秒)

Iphone X

1

27

3566

132.07

Iphone X

3

27

1577

58.41

微信对GIF的大小限制

  • 当 GIF 小于 1 MB 时,发出去的动图会自动播放;
  • 当 GIF大于1 MB 小于 5MB 时,发出去的动图需要点击按钮才能播放
  • 开新窗口,体验与小视频一致(Android 目前版本仍需要在新窗口下载后再查看);
  • 当 GIF 大于 5MB 时,微信会提示 GIF 图片过大,无法发送(添加)。

DEMO:


原文作者:腾讯IEG事业群\创意设计部\多媒体开发组员工——林雨

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯NEXT学位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目实现:
  • 流程图:
  • 使用的工具: 
  • Worker线程:
  • 详见推送《JavaScript Worker 另类玩法》
    • 文件选取、录像:
      • 数据采集:
        • 解决方案:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档