蹭热点,请给我一面国旗@微信官方

简介: 今天下午微信朋友圈炸了,所有人都在要国旗。迎国庆换新颜活动 | 腾讯新闻的合成服务 微信中打开。我们呢,也来蹭蹭热度,聊聊其中的技术。

网络异常,图片无法展示
|

猜测如何实现


  1. 授权-获取用户头像


  1. 载入图片


  1. 手势操作-移动缩放


  1. 合成图片


  1. 下载图片


求证如何实现


通过观察分析节点,我发现


  1. 的确是载入图片了。地址为blob:开头


  1. 但是并无canvas操作,而且基于DOM,用scale、translatetransfrom来支持


  1. 合成依赖html2canvas


  1. 下载基于长按图片。


自己动手实现


  1. 上传图片


使用FileAPI获取文件,URL.createObjectURL(file)file转换url


// 上传头像功能块
     uploadInput.addEventListener('change', function(){
         if(this.files.length){
             var file = this.files[0];
             avatarView.style.backgroundImage = 'url('+URL.createObjectURL(file)+')';
             // avatarView.src=URL.createObjectURL(file)
         }
     })


2.手势操作


e.touches里面会有当前触发点。通过transfrom来合成,当然因为多个值会造成坐标系偏移,我使用多层来处理。


<div class="avatarViewScale" id="avatarViewScale" style="transform: scale(1,1)">
  <div class="avatarViewTranslate" id="avatarViewTranslate" style="transform: translate(0,0)">
   <div class="avatar avatarView" src="https://www.lilnong.top/static/img/avator/avator-14.jpg" id="avatarView"></div>
  </div>
 </div>


  1. 移动是比较touchstart记录点与touchmove记录点的插值。比较好算
  2. 缩放是也是比较记录点,但是需要用勾股定理计算比例


3.合成图片


通过cavnasdrawImage来合成。我觉得偏移量应该要注意一下


4.下载图片


通过 canvas.toDataURL('image/jpeg') 来生成base64url然后放入img。通过微信自带的长按下载来实现


总结


  1. 毛边问题
  2. 图片预加载策略
  3. 旋转的算法
  4. 自定义素材
相关文章
【服务器数据恢复】服务器硬盘磁头损坏的数据恢复案例
一台服务器上raid阵列上有两块硬盘出现故障,用户方已经将故障硬盘送到其他机构检测过,其中一块硬盘已经开盘,检测结果是盘片损伤严重;另一块硬盘尚未开盘,初步判断也存在硬件故障,这两块磁盘的数据没有成功恢复。用户抱着试一试的想法将2块故障磁盘送到北亚企安数据恢复中心进行检测和数据恢复。
|
存储 SQL 分布式计算
《阿里云存储手册》——表格存储Tablestore
《阿里云存储手册》——表格存储Tablestore
501 0
|
负载均衡 算法 网络协议
08SpringCloud - Ribbon介绍
08SpringCloud - Ribbon介绍
119 0
|
存储 Linux
11.16 使用图形界面来配置RAID
RAID 配置起来要比 LVM 方便,因为它不像 LVM 那样分了物理卷、卷组和逻辑卷三层,而且每层都需要配置。我们在图形安装界面中配置 RAID 1 和 RAID 5,先来看看 RAID 1 的配置方法。
350 0
11.16 使用图形界面来配置RAID
|
编译器 C语言 C++
移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3... 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为6时,开始情形如下:
271 1
移动距离
|
弹性计算 大数据 Linux
ECS训练营第二天
购买ECS服务器的介绍
ECS训练营第二天
|
SQL 关系型数据库 MySQL
mysql笔记摘要
数据类型 数据库操纵语言
253 0
|
分布式计算 大数据 Java
[雪峰磁针石博客]大数据Hadoop工具python教程3-MapReduce
MapReduce是一种编程模型,通过将工作分成独立的任务并在一组机器上并行执行任务,可以处理和生成大量数据。 MapReduce编程风格的灵感来自函数式编程结构map和reduce,它们通常用于处理数据列表。
|
供应链 JavaScript
终于把PLM与ERP说明白了!
终于把PLM与ERP说明白了!   http://mp.weixin.qq.com/s?__biz=MjM5OTI2MjgyMA==&mid=2651785818&idx=1&sn=b9e3c3b524a21007dc7...
1886 0
|
机器学习/深度学习 数据可视化 数据挖掘
几个有用的R小函数
最近写的代码基本是R脚本了,越发感到R的强大。现在用它做一些数据分析以及进行一些模拟。 收几个常的函数在这里。 1. 批次替换data frame中的数据      i.
1168 0