今天下午微信朋友圈炸了,全部人都在要國旗。迎國慶換新顏活動 | 騰訊新聞的合成服務 微信中打開。
咱們呢,也來蹭蹭熱度,聊聊其中的技術。html
固然,上面只是我覺得。經過觀察分析節點,我發現前端
blob:
開頭scale、translate
等transfrom
來支持html2canvas
庫由於個人公衆號是我的號,沒權限。因此咱們稍微的改一下。
對不起父老鄉親們,昨天我沒寫完就下班了。測試地址,終於寫完了。下面說說關鍵點算法
上傳圖片
使用FileAPI
獲取文件,URL.createObjectURL(file)
將file
轉換url
canvas
// 上傳頭像功能塊 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) } })
手勢操做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>
touchstart
記錄點與touchmove
記錄點的插值。比較好算cavnas
的drawImage
來合成。我以爲偏移量應該要注意一下。canvas.toDataURL('image/jpeg')
來生成base64url
而後放入img
。經過微信自帶的長按下載來實現 太忙了。好不容易寫完。感受實現上仍是蠻簡單的,作好就不容易了。app
更新時間 2019年9月26日11:34:54
https://www.lilnong.top/stati...測試
增長了旋轉功能ui
ctx.translate(widthHeight / 2, widthHeight / 2) ctx.transform.apply(ctx, getComputedStyle(avatarViewRotate).transform.match(/-?[\d.]+/g)) ctx.translate(-1 * widthHeight / 2, -1 * widthHeight / 2);
更新時間 2019年9月26日13:47:19
https://www.lilnong.top/stati...this
更新時間 2019年10月9日09:08:37url