vue中怎么根据选择的名称 生成印章图片

项目中需要根据选择的印章名称,动态生成印章 ,印章下方显示当前的日期 代码如下

<template><div><label for="name">选择名称:</label><select id="name" v-model="selectedName"><option value="name1">名称1</option><option value="name2">名称2</option><option value="name3">名称3</option></select><button @click="generateStampImage">生成印章图片</button><div ref="stampContainer" v-if="stampGenerated"><img :src="stampImage" alt="印章" /></div></div>
</template>export default {data() {return {selectedName: '',stampGenerated: false,stampImage: ''};},
methods: {generateStampImage() {const stampText = this.selectedName;const canvas = document.createElement("canvas");canvas.width = 100; // 缩小印章尺寸canvas.height = 100;const ctx = canvas.getContext("2d");// 绘制圆形边框ctx.beginPath();ctx.arc(80, 80, 75, 0, 2 * Math.PI, false);ctx.fillStyle = "white";ctx.fill();ctx.lineWidth = 3;ctx.strokeStyle = "red";ctx.stroke();// 绘制五角星this.drawStar(ctx, 80, 80, 5, 30, 15); // 适当调整五角星大小ctx.fillStyle = "red";ctx.fill();// 绘制弧形文本this.drawCircularText(ctx, stampText, 80, 80, 60, -Math.PI / 2, "red"); // 调整文本的起始角度// 绘制日期ctx.font = "14px Arial";ctx.fillStyle = "red";ctx.textAlign = "center";ctx.fillText(this.currentDate, 80, 120); // 日期显示在五角星下方const stampImage = canvas.toDataURL("image/png");this.stampGenerated = true;this.stampImage = stampImage;},drawStar(ctx, cx, cy, spikes, outerRadius, innerRadius) {let rot = (Math.PI / 2) * 3;let x = cx;let y = cy;const step = Math.PI / spikes;ctx.beginPath();ctx.moveTo(cx, cy - outerRadius);for (let i = 0; i < spikes; i++) {x = cx + Math.cos(rot) * outerRadius;y = cy + Math.sin(rot) * outerRadius;ctx.lineTo(x, y);rot += step;x = cx + Math.cos(rot) * innerRadius;y = cy + Math.sin(rot) * innerRadius;ctx.lineTo(x, y);rot += step;}ctx.lineTo(cx, cy - outerRadius);ctx.closePath();},drawCircularText(ctx, text, x, y, radius, color) {ctx.fillStyle = color;ctx.font = '16px Arial';ctx.textBaseline = 'middle';let startAngle = -Math.PI; // 开始于水平左侧let totalAngle = 0; // 计算总角度// 计算文本占据的总角度for (let i = 0; i < text.length; i++) {totalAngle += ctx.measureText(text[i]).width / radius;}// 调整开始角度,使文本居中startAngle += (Math.PI - totalAngle) / 2;for (let i = 0; i < text.length; i++) {const char = text[i];const charWidth = ctx.measureText(char).width;const angle = startAngle + charWidth / (2 * radius);ctx.save();ctx.translate(x + Math.cos(angle) * radius, y + Math.sin(angle) * radius);ctx.rotate(angle + Math.PI / 2);ctx.fillText(char, -charWidth / 2, 0);ctx.restore();startAngle += charWidth / radius;}},
}}

使用的地方调用: this.generateStampImage();即可
生成的效果如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师&#xff0c;大家都知道技术面试是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用到了…

机器学习/sklearn 笔记:K-means,kmeans++,MiniBatchKMeans

1 K-means介绍 1.0 方法介绍 KMeans算法通过尝试将样本分成n个方差相等的组来聚类&#xff0c;该算法要求指定群集的数量。它适用于大量样本&#xff0c;并已在许多不同领域的广泛应用领域中使用。KMeans算法将一组样本分成不相交的簇&#xff0c;每个簇由簇中样本的平均值描…

为什么要写测试用例,测试用例写给谁看?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

mysql查询统计最近12个月的数据

项目场景&#xff1a; mysql查询统计最近12个月的数据&#xff0c;按每个月纵向展示&#xff0c;效果图 sql语句 注意&#xff1a;count( v.uuid ) 这里的是被统计那张表的id SELECT m.month,count( v.uuid ) AS total FROM (SELECT DATE_FORMAT(( CURDATE()), %Y-%m ) AS mon…

Leetcode—6.N字形变换【中等】

2023每日刷题&#xff08;三十七&#xff09; Leetcode—6.N字形变换 算法思想 参考k神的题解 实现代码 class Solution { public:string convert(string s, int numRows) {if(numRows < 2) {return s;}vector<string> rows(numRows);int flag -1;int i 0;for(…

JMeter集结点的使用场景以及如何使用?

JMeter是一个开源的负载测试工具&#xff0c;它被广泛用于测试应用程序、Web服务和网络协议等的性能。在JMeter中&#xff0c;集结点&#xff08;JMeter Cluster&#xff09;是一种分布式测试环境&#xff0c;它允许多个JMeter实例同时工作来模拟高并发负载。 使用集结点的场景…

聚水潭连接API,集成无代码开发,优化电商平台运营

聚水潭连接API&#xff0c;实现电商平台的高效运营 聚水潭作为一款SaaS ERP解决方案&#xff0c;通过其出色的产品和服务&#xff0c;迅速在市场上占据了一席之地。而其无代码开发的特点&#xff0c;为电商系统和客服系统的连接与集成提供了便利。聚水潭开放平台的优势在于&am…

2024年荆州中级工程师职称申报时间是什么时候?

甘建二十年耕耘职称。 2024年荆州中级工程师职称开始准备了&#xff0c;关于荆门中级职称具体申报时间&#xff0c;甘建二告诉你。 ​2024年荆州中级工程师职称申报时间&#xff1a; 1.水平能力测试报名3月份 2.水平能力测试考试4月份3.职称申报9月份&#xff0c;采取的是网上申…

ElementPlusError: [ElOnlyChild] no valid child node found

突然发现页面报了一堆黄色的错误提示 查了下原来是这里导致的&#xff0c;只需要把v-if 挪到popover那层即可 解决

win10底部任务栏无响应?试试这些方法!

win10的任务栏是一个关键的用户界面元素&#xff0c;允许您轻松访问应用程序和系统功能。然而&#xff0c;有时您可能会遇到win10底部任务栏无响应的问题&#xff0c;这会妨碍您的工作流程。本篇文章将介绍解决win 10底部任务栏无响应的问题的三种方法&#xff0c;每种方法都会…

RocketMQ保姆级教程

RocketMQ是阿里巴巴旗下一款开源的MQ框架&#xff0c;经历过双十一考验、Java编程语言实现&#xff0c;有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件&#xff0c;支持事务消息、顺序消息、批量消息、定时消息、消息回溯等&#xff0c;总之…

为Oracle链接服务器使用分布式事务

1 现象 在SQL Server中创建指向Oracle的链接服务器&#xff0c;SQL语句在事务中向链接服务器插入数据。返回链接服务器无法启动分布式事务的报错。 2 解决 在Windows平台下&#xff0c;SQL Server依赖分布式事务协调器&#xff08;MSDTC&#xff09;来使用分布式事务&#xff0…

关于APP备案的通知以及APP备案的常见问题

前言 众所周知今年8月份&#xff0c;工信部出台了《工业和信息化部关于开展移动互联网应用程序备案工作的通知》&#xff0c;APP开发者的影晌是显而易见的。开发者需要按照要求提交相关材料进行备案&#xff0c;这无疑增加了开发者的时间和精力成本。虽然备案制度会增加开发者…

深度学习之基于Tensorflow卷积神经网络鸟类目标识别检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Tensorflow的卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;在鸟类目标识…

MAX/MSP SDK学习06:内存管理

提供两种内存分配方式&#xff1a;①简单指针&#xff0c;②句柄&#xff08;二级指针&#xff09;&#xff1b;官方文档建议使用前者。 // 简单指针 char *ptr; ptr sysmem_newptr(2000); post("I have a pointer %lx and it is %ld bytes in size",ptr, sysmem_p…

opencv-分水岭算法分割

原理 任何一副灰度图像都可以被看成拓扑平面&#xff0c;灰度值高的区域可以被看成是山峰&#xff0c;灰度值低的区域可以被看成是山谷。我们向每一个山谷中灌不同颜色的水。随着水的位的升高&#xff0c;不同山谷的水就会相遇汇合&#xff0c;为了防止不同山谷的水汇合&#x…

ios(swiftui) 画中画

一、环境 要实现画中画 ios系统必须是 iOS14 本文开发环境 xcode14.2 二、权限配置 在项目导航器中单击项目&#xff0c;然后单击Signing & Capabilities。单击 Capabilit搜索Background Modes&#xff0c;然后双击将其添加为功能。在新添加的Background Modes部分&a…

Pyqt5实现多线程程序

主从架构 Pyqt常常使用**主从架构&#xff08;Master-Workers 架构&#xff09;**来避免界面卡死的情况。 Master-Workers 架构就像它的名字&#xff0c;一个master统领着几个workers一起干活。其中某个worker倒下了不会导致整体任务失败。matser不用干活&#xff0c;因此可以…

分布式锁之基于redis实现分布式锁(二)

2. 基于redis实现分布式锁 2.1. 基本实现 借助于redis中的命令setnx(key, value)&#xff0c;key不存在就新增&#xff0c;存在就什么都不做。同时有多个客户端发送setnx命令&#xff0c;只有一个客户端可以成功&#xff0c;返回1&#xff08;true&#xff09;&#xff1b;其他…

市场是变化的?这种悖论fpmarkets澳福一秒打破

你是不是始终认为市场是经常变化的&#xff0c;其实这是不对的&#xff0c;这种认识fpmarkets澳福今天一秒打破。 市场经常变化吗?众多投资者无需过多思考&#xff0c;就认为答案是肯定的。因为无论是在互联网的哪个角落&#xff0c;都可以看到这样的信息。即使我们没有深入研…