canvas生成圖片的跨域問題


在做一個項目的分享時,要調用客戶端的分享方法,需要生成一個base64的圖片,遇到一個比較奇怪的問題,用canvas繪制圖片的時候,會報錯,部分代碼和錯誤如下

//分享微信
function shareWx(shareType){
	var type = "weixin";//分享類型--->微信分享
	var base64Image="";
	var c=document.getElementById("myCanvas");//創建幕布
	var ctx=c.getContext("2d");
	var img = new Image();//加載底圖圖片
	var img2= new Image();//加載要拼裝的圖標

  

//動植物等級提升的分享
	}else if(shareType=='newLevel'){
		chineNameSch(chineName);//初始化動植物中文全稱
		var plantName = chineName.get(petCode);;//動植物的中文名稱
		var length=plantName.length;//得得到字符串的長度,用來居中
       	img.src="shareImages/cz.jpg";
       	img2.src=app25.newLevelImage;//圖片的路徑
	  	img.onload = function(){
	  		ctx.drawImage(img,0,0,750,1334);
	  		ctx.font="40px Arial"
	  		ctx.fillStyle='#FFFF00';
	  		if(length==5){
	  			ctx.fillText(plantName,255,775);
	  		}else{
	  			ctx.fillText(plantName,310,775);
	  		}
	  		ctx.drawImage(img2,220,450,300,300);
	  		commonShaer(type,base64Image);
		}

  

function commonShaer(type,base64Image){
	var myCanvas = document.getElementById("myCanvas");
	var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); 
	var strs= new Array(); //定義一數組 
	strs=image.split(";base64,"); //字符分割 
	base64Image=strs[1];
   
	var u = navigator.userAgent, app = navigator.appVersion;
    if(u.indexOf('Android') > -1 || u.indexOf('Linux') > -1)
    {
    	window.woxin.wxShareBase64Image(type,base64Image);//安卓分享圖片js方法 
    }
    else if(!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/))
    {
    	wxShareBase64Image(type,base64Image); //iOS分享圖片js方法
    }
    //用戶升級領取金幣
    getGrowupPrizeByshareNew("growup20","");
}

  

上網查資料是這么說的

原來是存在跨域問題,只需要在加一句代碼,就完美解決了

else if(shareType=='newLevel'){
		chineNameSch(chineName);//初始化動植物中文全稱
		var plantName = chineName.get(petCode);;//動植物的中文名稱
		var length=plantName.length;//得得到字符串的長度,用來居中
       	img.src="shareImages/cz.jpg";
       	img2.src=app25.newLevelImage;//圖片的路徑
       	// 解決圖片的跨域問題
       	img2.crossOrigin = "Anonymous";
	  	img.onload = function(){
	  		ctx.drawImage(img,0,0,750,1334);
	  		ctx.font="40px Arial"
	  		ctx.fillStyle='#FFFF00';
	  		if(length==5){
	  			ctx.fillText(plantName,255,775);
	  		}else{
	  			ctx.fillText(plantName,310,775);
	  		}
	  		ctx.drawImage(img2,220,450,300,300);
	  		commonShaer(type,base64Image);
		}

base64的圖片也完美生成了

  

實際項目中遇到的問題,在這記錄下,希望對大家有所幫助


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM