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.hqwc.cn/news/210420.html

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

相关文章

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

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

【论文】Bao:一种用于现代多核嵌入式系统的轻型静态分区管理程序

Bao&#xff1a;一种用于现代多核嵌入式系统的轻型静态分区管理程序 个人学习过程中 Bao Hypervisor 论文翻译&#xff08;借助翻译工具个人校对&#xff09;&#xff0c;仅供学习使用&#xff0c;由于个人对一些技术专有名词不够熟悉&#xff0c;翻译不当的地方欢迎指出 论文地…

类初始化,类加载,类加载器

类初始化&#xff0c;类加载&#xff0c;类加载器 1. 类加载1.1. 类的加载1.2. 类的链接1.2.1. 验证1.2.2. 准备1.2.3. 解析 2. 类加载器2.1. 类加载器分为四种&#xff1a;前三种为虚拟机自带的加载器。2.2. 类加载有三种方式&#xff1a;2.3. **JVM类加载机制**2.4. 双亲委派…

vue项目使用easyplayer播放m3u8直播推流

官网 青犀视频 代码库 / 示例 / demo EasyPlayer 示例效果&#xff1a; 项目背景如图 后端给了m3u8的直播地址 协议是 hls / flv 市面上很多第三方热门播放库都可以完成该多屏播放方式 如Video.js 问题在于 分多屏时 会存在性能问题 并且关闭播放器后 即便删除Dom或调用停…

【LeetCode二叉树进阶题目】606. 根据二叉树创建字符串,102. 二叉树的层序遍历,107. 二叉树的层序遍历 II

二叉树进阶题目 606. 根据二叉树创建字符串解题思路及实现 102. 二叉树的层序遍历解题思路及实现 107. 二叉树的层序遍历 II解题思路及实现 606. 根据二叉树创建字符串 描述 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号…

[ChatGPT]ChatGPT免费,不用翻墙!?——你需要的装备

系列文章目录 【AIGC】服务于人类&#xff5c;一种新的人工智能技术-CSDN博客 文章目录 目录 系列文章目录 文章目录 前言 一、天意云网站 ​编辑 二、使用步骤 可以看到有云服务器、Rstudio以及我们的ChatGPT&#xff0c;我这次主要分享ChatGPT&#xff0c;其他的有机会我再给…

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

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

想自学软件测试?一般人我还是劝你算了吧。。。

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

考过了PMP,面试的时候应该怎么办?

近期喜番在后台收到了很多同学们的私信&#xff0c;表示自己已经过了8月份的PMP考试&#xff0c;开始着手往项目管理岗位转型&#xff0c;但是对于项目管理岗位的面试却一筹莫展。放轻松&#xff0c;大家的需求喜番都了解了&#xff0c;喜番给大家总结了一些项目经理在面试的时…

重磅!1区、60年老牌期刊被踢?共5本被剔除!11月SCIE/SSCI期刊目录更新!

期刊动态&#xff1a;2023年11月SCI、SSCI期刊目录更新 2023年11月20日&#xff0c;科睿唯安更新了WOS期刊目录&#xff0c;继上次10月WOS期刊目录剔除7本SCIE&SSCI期刊之后&#xff0c;此次11月更新又有5本期刊发生变动&#xff0c;其中有4本SCIE期刊被剔除&#xff0c;1…

财报解读:电商GMV增长30%后,快手将坚守本地生活?

快手逐渐讲好了其高质量成长的故事。 根据财报&#xff0c;快手三季度业绩超出预期&#xff0c;其中&#xff0c;营收279.5亿元&#xff0c;同比增长20.8%&#xff1b;调整后净利润31.7亿元&#xff0c;同比扭亏为盈。 而联系市场环境来看&#xff0c;三季度广告、电商市场较…

蓝海商机重大更新,抖店商家如何从中获得流量扶持?

我是电商珠珠 都说抖店平台的流量扶持力度很大&#xff0c;于是有些新手也去根据网上所说的去操作了。 但是看着别人的店铺都拿到了成千上万的曝光&#xff0c;自己的店铺丝毫未动。 那是因为你的商品&#xff0c;还没有满足获得流量扶持的要求。 在抖店后台商品板块的商机…