canvas合并图片简单用法

本文介绍如何使用jQuery插件生成包含二维码和文字的支付图片,涵盖从生成二维码到将其与文字合并并转换为图片的全过程,解决图片清晰度及尺寸问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:保存一个付款图片,图片中包含 二维码 + 文字

插件:第三方jquery插件

写法:

1、按照第三方插件的提示,这样可以展示生成二维码

<div id="pop">
	<div id="output"></div>
	<div id="title">想去旅行的静静</div>
</div>

jQuery(function(){
	jQuery('#output').qrcode({
	    render: "canvas", //也可以替换为table
	    id: "demo",
	    foreground: "#2d2d2d",
	    width: 200,
    	height: 200,
	    background: "#FFF",
	    text: "https://blog.csdn.net/weixin_39107711"
	});
})

2、 将canvas转化成image方法

参考这里或者这里,可以把canvas解析成base64的图片。

3、接下来我需要把文字也加入到图片中,也可以说是两个canvas合并。

将文字绘入canvas中,⚠️要使用canvas标签

<canvas id="title" width="300" height="100"></canvas>
function draw(id){
    // 获取canvas元素
    let canvasWrap = document.getElementById(id);
    // 获取属性和方法
    let context = canvasWrap.getContext("2d");
    // 绘制文字
    let str = "Hello World";
    context.font="30px Microsoft YaHei";
    context.textAlign="center";
    context.strokeText(str,100,50);
}

strokeText和fillText都可以实现,这两个有什么区别?

fillText() 方法在画布上绘制填色的文本bai。du文本的默zhi认颜色是黑色。

strokeText() 方法是用来在画布上绘制文本(没有填色)。文本的默认颜色是黑色。

接下来两个向一个canvas中绘制图片+文字,然后将这个canvas转化成图片,就可以了。

<div id="pop">
	<div id="originQR"></div>
	<canvas id="originTxt"></canvas>
</div>
<canvas id="realpop"></canvas>
<div id="demo"></div>

jQuery(function(){
	var screenWidth = window.screen.width
	console.log(screenWidth)
	jQuery('#originQR').qrcode({
	    render: "canvas", //也可以替换为table
	    foreground: "#2d2d2d",
	    width: screenWidth * 0.3,
    		height: screenWidth * 0.3,
	    background: "#FFF",
	    text: "https://blog.csdn.net/weixin_39107711"
	});

	var originQrId = document.getElementById("originQR");
	var originQrCanvas = originQrId.getElementsByTagName('canvas')[0];
	var realpop = document.getElementById('realpop')
	realpop.Width = screenWidth * 0.9;
	realpop.Height = screenWidth * 1.2;
	var context = realpop.getContext("2d");
	context.drawImage(originQrCanvas, screenWidth*0.2, 30)
	writeToCanvas(context, '我想静静', screenWidth*0.25, screenWidth*0.37)
	convertCanvasToImage(realpop)
})
function writeToCanvas(context, string, width, height){
	// 设置字体
	context.font = "16px bold 黑体";
	// 设置颜色
	context.fillStyle = "#e60012";
	// 设置水平对齐方式
	context.textAlign = "center";
	// 设置垂直对齐方式
	context.textBaseline = "middle";
	// 绘制文字(参数:要写的字,x坐标,y坐标)
	context.fillText(string, width, height);
}
function convertCanvasToImage(canvas){
	var image = new Image();
	image.src = canvas.toDataURL("image/png");
	document.getElementById('demo').appendChild(image)
	return image;
}

 这个时候,我发现又有个坑,图片不清晰,是模糊的。

引入了一个hidpi-canvas.min.js组件,发现图片清晰了,但是图片长度不太对,保存的图片是这样的

这时还需要配合hidpi-canvas.min.js来做一下处理。

代码还需要整理一下。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值