javaScript 图片合成

最近由于工作需要,查了好多资料,整理出了一份关于图片合成的代码,希望可以帮助大家,代码中还包含了跨域图片的下载,避开了不同源情况下,点击下载图片是打开访问而不是下载的情况。文中直接用了查阅时部分优秀代码,感谢他们的贡献。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<!--<img src="huodong3.png">
		<img src="share.png">-->
		<a href="javascript:;" class="down_btn_a">点击下载</a>
		<img id="avatar" src=""/>
		<div style="visibility: hidden;" id="qrcodeNode"></div>
	</body>
	<script src="qrcode.js"></script>
	<script type="text/javascript" src="concatV/jquery-2.1.0.js" ></script>
	<script>
		let imgArr = ['http://www.baidu.com','httP://www.taobao.com','httP://www.bcuae.info.com','http://www.baidu.com','http://www.baidu.com','http://www.baidu.com','http://www.baidu.com','http://www.baidu.com','http://www.baidu.com'];
		let a = Math.floor(Math.random()*10)
		drawAndShareImage();
		document.getElementById("qrcodeNode").innerHTML = "";
        let qrcode = new QRCode("qrcodeNode", {
          text: imgArr[a],
          width: 249,
          height: 249
        });
		function drawAndShareImage(){
		    var canvas = document.createElement("canvas");
		    canvas.width = 700;
		    canvas.height = 700;
		    var context = canvas.getContext("2d");
		
		    context.rect(0 , 0 , canvas.width , canvas.height);
		    context.fillStyle = "#fff";
		    context.fill();
		
		    var myImage = new Image();
		    myImage.src = "huodong3.png";    //背景图片  你自己本地的图片或者在线图片
		    myImage.crossOrigin = 'Anonymous';
		
		    myImage.onload = function(){
		        context.drawImage(myImage , 0 , 0 , 700 , 700);
		
		        context.font = "60px Courier New";
//		        context.fillText("我是文字",350,450);
		        src = document.getElementsByTagName("img")[1].src;
		        var myImage2 = new Image();
		        myImage2.src = src;   //你自己本地的图片或者在线图片
		        myImage2.crossOrigin = 'Anonymous';
		        
		        myImage2.onload = function(){
		            context.drawImage(myImage2 , 175 , 175 , 225 , 225);
		            var base64 = canvas.toDataURL("image/png");  //"image/png" 这里注意一下
		            var img = document.getElementById('avatar');
		
		            // document.getElementById('avatar').src = base64;
		            img.setAttribute('src' , base64);
		            
		            
		            //接下来进行事件绑定
					var aBtn = $(".down_btn_a");
					if (browserIsIe()) {
					    //是ie等,绑定事件
					    aBtn.on("click", function() {
					        var imgSrc = $(this).siblings("img").attr("src");
					        //调用创建iframe的函数
					        createIframe(imgSrc);
					    });
					} else {
					    aBtn.each(function(i,v){
					    //支持download,添加属性.
					    
					    var imgSrc = base64;
					    console.log(imgSrc)
					    $(v).attr("download",imgSrc);
					    $(v).attr("href",imgSrc);
					    })
					}
		        }
		    }
		}
		
		
		//判断是否为Trident内核浏览器(IE等)函数
		function browserIsIe() {
		    if (!!window.ActiveXObject || "ActiveXObject" in window){
		        return true;
		    }
		    else{
		        return false;
		    }
		}
		//创建iframe并赋值的函数,传入参数为图片的src属性值.
		function createIframe(imgSrc) {
		    //如果隐藏的iframe不存在则创建
		    if ($("#IframeReportImg").length === 0){
		        $('<iframe style="display:none;" id="IframeReportImg" name="IframeReportImg" onload="downloadImg();" width="0" height="0" src="about:blank"></iframe>').appendTo("body");
		    }
		    //iframe的src属性如不指向图片地址,则手动修改,加载图片
		    if ($('#IframeReportImg').attr("src") != imgSrc) {
		        $('#IframeReportImg').attr("src",imgSrc);
		    } else {
		        //如指向图片地址,直接调用下载方法
		        downloadImg();
		    }
		}
		//下载图片的函数
		function downloadImg() {
		    //iframe的src属性不为空,调用execCommand(),保存图片
		    if ($('#IframeReportImg').src != "about:blank") {
		        window.frames["IframeReportImg"].document.execCommand("SaveAs");
		    }
		}
		
	</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值