使用canvas生成含有微信頭像的邀請海報沒有微信頭像問題

最近做了一個微信內(nèi)訪問的H5頁面,長按分享圖片發(fā)送朋友邀請的海報,網(wǎng)上搜索資料,得出解決思路,用canvas將頁面繪制生成圖片,
問題:canvas 圖片跨域。
解決過程(填坑歷程):
1.從網(wǎng)上存在如圖解決辦法 img.crossOrigin = "" (專業(yè)采坑,數(shù)年)。親測無效。很是不解。
2.網(wǎng)上也存在后端服務(wù)解決
設(shè)置header頭,或者nginx 服務(wù)配置等 允許訪問。但是,存在問題(圖片大部分為了優(yōu)化,都會存放在第三方cdn.上面。這是第三方的配置,是否允許,自己很難控制)
3.解決辦法:采用所有圖片路徑,轉(zhuǎn)化為base64流來處理。圖片存為本地圖片。這也可以就避開了跨域問題。
最后個人解決方法:沒有采用第3種保存本地,這樣會增加本地圖片,而且會存在本地跟微信端沒有同步更新的問題,不是用戶最新的頭像。個人是采用遠(yuǎn)程下載后直接繪制輸出圖片,這樣圖片就變成本地圖片,解決canvas繪制圖片不支持跨域問題。
wxheadimg.aspx 頁面代碼:
if (!string.IsNullOrEmpty(Request.QueryString["data"].ToString())) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Request.QueryString["data"].ToString()); request.Timeout = 3000; WebResponse response = request.GetResponse(); Stream stream = response.GetResponseStream(); Bitmap image = new Bitmap(stream); //保存為PNG到內(nèi)存流 MemoryStream ms = new MemoryStream(); image.Save(ms, ImageFormat.Png); //重新輸出頭像 Response.BinaryWrite(ms.GetBuffer()); Response.End(); ms.Close(); response.Close(); stream.Close(); }
canvas繪制頁面引用:<img src="wxheadimg.aspx?data=headimgurl" />
canvas繪制代碼也順便弄出來:
<script type="text/javascript"> window.onload = function () { var IMAGE_URL; function takeScreenshot(){ var shareContent = document.getElementById('shareMember');//需要截圖的包裹的(原生的)DOM 對象 var width = shareContent.offsetWidth; //獲取dom 寬度 var height = shareContent.offsetHeight; //獲取dom 高度 var canvas = document.createElement("canvas"); //創(chuàng)建一個canvas節(jié)點 var scale = 1; //定義任意放大倍數(shù) 支持小數(shù) canvas.width = width * scale; //定義canvas 寬度 * 縮放 canvas.height = height * scale; //定義canvas高度 *縮放 canvas.getContext("2d").scale(scale, scale); //獲取context,設(shè)置scale //var rect = shareContent.getBoundingClientRect();//獲取元素相對于視察的偏移量 //canvas.getContext("2d").translate(-rect.left, -rect.top);//設(shè)置context位置,值為相對于視窗的偏移量負(fù)值,讓圖片復(fù)位 var opts = { scale:scale, // 添加的scale 參數(shù) canvas:canvas, //自定義 canvas logging: true, //日志開關(guān) width:width, //dom 原始寬度 height:height, //dom 原始高度 backgroundColor: 'transparent', }; html2canvas(shareContent, opts,{useCORS:true,logging:true}).then(function (canvas) { IMAGE_URL = canvas.toDataURL("image/png"); $('.copyImage').attr('src',IMAGE_URL); }) } takeScreenshot(); } </script>
頁面代碼 :
<div class="shareBox" id="shareMember"> <div class="top"> <div class="logo"><img src="wxheadimg.aspx?data=微信頭像網(wǎng)址"/></div> </div> <div class="middle"> <img src="makeQRCode.aspx?data=二維碼內(nèi)容" class="qrcode" /> </div> <img src="" class="copyImage"> </div> jpg.shareBox{position:relative} .shareBox .copyImage{position:absolute;top:0px;left:0px;z-index:999;opacity:0;height:666px;width:666px;}
總結(jié)
以上所述是小編給大家介紹的使用canvas生成含有微信頭像的邀請海報沒有微信頭像問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
微信小程序之html5 canvas繪圖并保存到系統(tǒng)相冊
這篇文章主要介紹了微信小程序之html5 canvas繪圖并保存到系統(tǒng)相冊,需要的朋友可以參考下2019-06-20- 這篇文章主要介紹了詳解html5 canvas 微信海報分享(個人爬坑)的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-12
HTML5+Canvas實現(xiàn)飛機加速減速特效源碼
HTML5實現(xiàn)飛機加速減速特效源碼是一款基于HTML5 Canvas實現(xiàn)的微信小游戲代碼。本段代碼可以在各個網(wǎng)頁使用,有需要的朋友可以直接下載使用2017-08-29html5 canvas合成海報所遇問題及解決方案總結(jié)
這篇文章主要介紹了html5 canvas合成海報所遇問題及解決方案總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-03- 這是一款基于HTML5 Canvas的微信運動折線圖插件wcMotionChart的代碼,簡單方便2016-03-29
HTML5+canvas實現(xiàn)微信朋友圈發(fā)紅包照片特效源碼
HTML5+canvas實現(xiàn)微信朋友圈發(fā)紅包照片特效源碼是一款基于html5 canvas實現(xiàn)的仿微信朋友圈討紅包看照片效果,感興趣的朋友前來下載源碼哦2016-02-25