分享编程~
 

js两张多图片合成一张图片简单示例

纯JavaScript两张、多图片合成一张图片简单示例

天天特卖抢好货

纯JavaScript两张、多图片合成一张图片简单示例。

实现原理就是创建画布canvas将多张目标图片通过drawImage定位绘制到画布中。

<!DOCTYPE html>
<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>js两张多图片合成一张图片简单示例</title>
	<meta name="keywords" content="js两张多图片合成一张图片简单示例,js图片合成,javascript多图片合成">
    <meta name="description" content="纯JavaScript两张、多图片合成一张图片简单示例">
	<style>
		img {border: solid 1px #ddd;}
		.title{font-size:16px;}
		.box{margin:10px;padding:10px;border:1px solid #ccc;}
		#mergeBtn{margin:10px;border:1px solid red;padding:5px;width:100px;text-align:center;color:red;}
	</style>
	</head>
<body>
	<div class="box">
		<div class="title">需要合成的图片:</div>
		<div id="tmpImg">
			<img src="qrcode.png" id="tmpImgD1">
			<img src="logo.jpg" id="tmpImgD2">
		</div>
	</div>
	<div id="mergeBtn">合成</div>
	<div class="box">
		<div class="title">合成后的图片:</div>
		<div id="mergeImgBox"></div>
		<button id="dowload">下载</button>
	</div>
<script>
	var data = ['qrcode.png', 'logo.jpg']; // 预定图片数组
	var len = data.length; // 数组元素个数
	var tmpImgD = 'tmpImgD';
	// 点击合成
	document.getElementById('mergeBtn').onclick = function(){
		var imgs = drawing(len, tmpImgD);
		document.getElementById('mergeImgBox').innerHTML='<img src="' imgs[0] '" /  id="mergeImg">';
	}
	
	/**
	 * 图片合成
	 */
	function drawing(len, tmpImgD){
		var base64 = [];
		var c = document.createElement('canvas'); // 创建canvas
			c.width = 256;  // 设置canvas宽
			c.height = 256; // 设置canvas高
		var	ctx = c.getContext('2d'); // 返回一个用于在画布上绘图的环境
			ctx.rect(0,0,c.width,c.height); // 创建矩形x(x,y,width,height)
			ctx.fillStyle = '#fff'; // 填充绘画的颜色
			ctx.fill(); // 填充当前的图像
		for(var i = 0; i < len; i  ){
			var img = document.getElementById((tmpImgD (i 1)));
			// 在画布上绘制图像
			if(i == '0'){
				// 第一张图片
				ctx.drawImage(img,0,0,256,256,0,0,256,256);
			}else if(i == '1'){
				// 第二张图片
				ctx.drawImage(img,0,0,50,50,103,103,50,50);
			}
			
			//或者这样
			/*
			if(i == '0'){
				ctx.drawImage(img,0,0,256,256);
			}else if(i == '1'){
				ctx.drawImage(img,103,103,50,50);
			}
			*/
		}
		//console.log(ctx);
		base64.push(c.toDataURL("image/jpeg",1)); // 合成新图像
		return base64;
	}

	/**
	 * base64转blob二进制
	 */
	function dataURLtoBlob(dataurl) {
		var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
		bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
		while (n--) {
			u8arr[n] = bstr.charCodeAt(n);
		}
		return new Blob([u8arr], { type: mime });
	}
	
	/**
	 * 点击下载
	 */
	document.getElementById('dowload').onclick = function(){
		//var imgArr = drawing(len, tmpImgD);
		//var img = imgArr[0];
		var imgDom = document.getElementById('mergeImg');
		if(!imgDom){
			alert('请先点击生成');
			return false;
		}
		var img = imgDom.src;
		console.log(img);
		let blob = dataURLtoBlob(img);
		// 创建一个a链接
		var aTag = document.createElement("a");
		// 给下载文件命名
		aTag.download = blob.ATTACHUSERFILE = '2.jpg';
		// 创建下载
		aTag.href = URL.createObjectURL(blob);
		// 开始下载
		aTag.click();
		URL.revokeObjectURL(blob);
	}
</script>
</body>
</html>

需要合成的图片(2张):

qrcode点击查看原图

logo点击查看原图

示例效果图:

js多图片合成一张图片_图例


上一篇:php计算程序运行时间以及程序占用内存下一篇:前端csv2arr.js库表格execl文件数据解析
赞(6) 踩(0)
您说多少就多少,您的支持是我最大的动力
赏金
微 信
赏金
支付宝
本文连接: https://www.yj521.com/article/111.html
版权声明: 本文为原创文章,版权归《越加网》所有,分享转载请注明出处!