用 canvas 原生JS创建红色公章

javascript 复制代码
function officialseal(opt) {
	opt = opt || {
		canvas: $$('#canvas'),
		companyName: canvas.getAttribute('data-companyName'),
		sealTypeName: canvas.getAttribute('data-sealTypeName')
	};
	
	// official seal
	var ctx = opt['canvas'].getContext('2d'), color = '#f00', width = opt['canvas'].width/2, height = opt['canvas'].height/2;
	ctx.lineWidth = 6;
	ctx.strokeStyle = color;
	ctx.beginPath();
	ctx.arc(width, height, 110, 0, Math.PI*2);
	ctx.stroke();

	// five pointed star
	var radius = 30, rotato = 0;
	ctx.save();
	ctx.fillStyle = color;
	ctx.translate(width, height);
	ctx.rotate(Math.PI+rotato);
	ctx.beginPath();
	var x, y, dig = Math.PI/5*4;
	for (var i = 0;i< 5;i++) {
		 x = Math.sin(i*dig);
		 y = Math.cos(i*dig);
		 ctx.lineTo(x*radius, y*radius);
	}
	ctx.closePath();
	ctx.stroke();
	ctx.fill();
	ctx.restore();
	
	// sealTypeName
	ctx.font = '20px Microsoft YaHei';
	ctx.textBaseline = 'middle';
	ctx.textAlign = 'center';
	ctx.lineWidth = 1;
	ctx.fillStyle = color;
	ctx.fillText(opt['sealTypeName'], width, height+70);

	// companyName
	ctx.translate(width, height);
	ctx.font = '26px Microsoft YaHei';
	var  chars = opt['companyName'].split('')
		, count = chars.length
		, angle = 4*Math.PI / (3*(count - 1))
	;
	for (var i = 0; i < chars.length; i++){ // var character = chars[i];
		if (i == 0) {
			ctx.rotate(5*Math.PI/6);
		} else {
			ctx.rotate(angle);
		}
		ctx.save(); 
		ctx.translate(90, 0);
		ctx.rotate(Math.PI/2);
		ctx.fillText(chars[i], 0, 5);
		ctx.restore(); 
	}
}
html 复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="renderer" content="webkit" />
<meta name="viewport" content="width=device-width,user-scalable=yes" />
<meta name="renderer" content="webkit|ie-comp|ie-stand" />
<title>official_seal</title>
<script src="/js/u.js?v=1"></script>
</head>
<body onclick="clickHandler(event);" onchange="changeHandler(event);">
<canvas id="canvas" width="250" height="250" data-companyName="郑州快马科技有限公司" data-sealTypeName="测试专用章"></canvas>
<script src="official_seal.js?v=1"></script>
</body>
</html>
相关推荐
幺风7 小时前
Claude Code 源码分析 — Tool/MCP/Skill 可扩展工具系统
前端·javascript·ai编程
ZC跨境爬虫8 小时前
3D 地球卫星轨道可视化平台开发 Day7(AI异步加速+卫星系列精简+AI Agent自动评论)
前端·人工智能·3d·html·json
ID_180079054738 小时前
淘宝 API 上货 / 商品搬家 业务场景实现 + JSON 返回示例
前端·javascript·json
M ? A8 小时前
Vue 动态组件在 React 中,VuReact 会如何实现?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
ZC跨境爬虫10 小时前
3D 地球卫星轨道可视化平台开发 Day8(分步渲染200颗卫星+ 前端分页控制)
前端·python·3d·重构·html
竹林81810 小时前
RainbowKit快速集成多链钱包连接,我如何从“连不上”到“丝滑切换”
前端·javascript
No8g攻城狮10 小时前
【前端】Vue 中 const、var、let 的区别
前端·javascript·vue.js
fishmemory7sec10 小时前
Vue大屏自适应容器组件:v-scale-screen
前端·javascript·vue.js
饺子不吃醋10 小时前
Promise原理、手写与 async、await
前端·javascript
大黄说说12 小时前
HTML5语义化标签:从div到article与section的进化之路
前端·html·html5