效果如图
在这里插入图片描述

// useMpCustomShareImage.ts

interface MpCustomShareImageData {canvasId: stringprice: stringlinePrice: stringgoodsSpecFirmName: stringimage: string
}const CANVAS_WIDTH = 500
const CANVAS_HEIGHT = 400
const BG_IMAGE = 'https://public-scjuchuang.oss-cn-chengdu.aliyuncs.com/goods_share.png'
const DEFAULT_IMAGE ='https://public-scjuchuang.oss-cn-chengdu.aliyuncs.com/mini_program/mp_default_sc.png'const loadImageInfo = (src: string): Promise<UniApp.GetImageInfoSuccessData> => {return new Promise((resolve, reject) => {uni.getImageInfo({src,success: resolve,fail: reject,})})
}// 绘制价格
const loadPrice = (ctx: any, text: string, x: number, y: number) => {ctx.font = `bold ${text.length >= 10 ? '32px' : '36px'} sans-serif`ctx.setFillStyle('#e2231a')ctx.setTextAlign('center')ctx.setTextBaseline('middle')ctx.fillText(text, x, y)
}// 绘制划线价
const loadLinePrice = (ctx: any, text: string, x: number, y: number) => {ctx.font = '20px sans-serif'ctx.setFillStyle('#999999')ctx.fillText(text, x, y)const metrics = ctx.measureText(text)ctx.strokeStyle = '#999999'ctx.lineWidth = 2const textWidth = metrics.widthctx.beginPath()ctx.moveTo(x - textWidth / 2, y)ctx.lineTo(x + textWidth / 2, y)ctx.stroke()
}// 绘制规格厂家
const loadGoodsSpecFirmName = (ctx: any, text: string, y: number) => {const maxWidth = 480ctx.font = '20px sans-serif'ctx.setFillStyle('#333')// 短文字const textWidth = ctx.measureText(text).widthif (textWidth <= maxWidth) {return ctx.fillText(text, CANVAS_WIDTH / 2, y)}// 长文字,省略显示const displayText = text.substring(0, 21) + '...'ctx.fillText(displayText, CANVAS_WIDTH / 2, y)
}const useMpCustomShareImage = () => {const set = async (data: MpCustomShareImageData): Promise<string> => {const { canvasId, price, linePrice, goodsSpecFirmName, image = DEFAULT_IMAGE } = dataconst imageWidth = 250const imageHeight = 250try {const ctx = uni.createCanvasContext(canvasId, this)const [bgImageInfo, imageInfo] = await Promise.all([loadImageInfo(BG_IMAGE),loadImageInfo(image),])// 绘制背景图ctx.drawImage(bgImageInfo.path, 0, 0, CANVAS_WIDTH, CANVAS_HEIGHT)// 绘制商品图ctx.drawImage(imageInfo.path, 20, 80, imageWidth, imageHeight)// 绘制价格loadPrice(ctx, price, CANVAS_WIDTH - imageWidth / 2, 150)// 绘制划线价loadLinePrice(ctx, linePrice, CANVAS_WIDTH - imageWidth / 2, 200)// 绘制规格厂家loadGoodsSpecFirmName(ctx, goodsSpecFirmName, 360)// 绘制await new Promise<void>((resolve) => {ctx.draw(false, resolve)})// 生成分享图const { tempFilePath } = await new Promise<UniApp.CanvasToTempFilePathRes>((resolve, reject) => {uni.canvasToTempFilePath({canvasId,success: resolve,fail: reject,})},)return tempFilePath} catch (error) {console.error('生成分享图失败:', error)return image}}return { set }
}export default useMpCustomShareImage

// 调用

import useMpCustomShareImage from './useMpCustomShareImage'const mpCustomShareImage = useMpCustomShareImage()mpCustomShareImage.set({canvasId: 'shareCanvas',price: `¥4.60/盒`,linePrice: `¥4.73/盒`,goodsSpecFirmName: `0.25g*50粒 重庆科瑞制药(集团)有限公司`,image:'https://public-scjuchuang.oss-cn-chengdu.aliyuncs.com/mini_program/mp_default_sc.png',}).then((img) => {// 分享图console.log(img)})// -left-[1000px] -top-[1000px] 要放在页面上,且不显示
<canvascanvasId="shareCanvas"class="w-[500px] h-[400px] absolute -left-[1000px] -top-[1000px]"
/>

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

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

相关文章

醋酸镧:看不见的科技助力

虽然我们每天都在使用各种科技产品&#xff0c;但有些关键的化学物质却鲜为人知。醋酸镧&#xff0c;就是这样一种默默为科技进步贡献力量的“幕后英雄”。它不仅是稀土元素镧的一种化合物&#xff0c;还在许多高科技领域中发挥着重要作用。今天&#xff0c;让我们一起来了解这…

苍穹外卖日记

day 1 windows系统启动nginx报错: The system cannot find the path specified 在启动nginx的时候报错&#xff1a; /temp/client_body_temp" failed (3: The system cannot find the path specified) 解决办法&#xff1a; 1.检查nginx的目录是否存在中文 &#xff0c;路…

楼宇自控系统赋能建筑全维度管理,实现环境、安全与能耗全面监管

随着城市化进程加速和绿色建筑理念普及&#xff0c;现代楼宇管理正经历从粗放式运营向精细化管控的转型。楼宇自控系统&#xff08;BAS&#xff09;作为建筑智能化的核心载体&#xff0c;通过物联网、大数据和人工智能技术的深度融合&#xff0c;正在重构建筑管理的全维度框架&…

【HarmonyOS】Window11家庭中文版开启鸿蒙模拟器失败提示未开启Hyoer-V

【HarmonyOS】Window11家庭中文版开启鸿蒙模拟器失败提示未开启Hyoer-V一、问题背景 当鸿蒙模拟器启动时&#xff0c;提示如下图所示&#xff1a;因为Hyper-V 仅在 Windows 11 专业版、企业版和教育版中作为预装功能提供&#xff0c;而家庭版&#xff08;包括中文版&#xff09…

vscode远程服务器出现一直卡在正在打开远程和连接超时解决办法

项目场景&#xff1a; 使用ssh命令或者各种软件进行远程服务器之后&#xff0c;结果等到几分钟之后自动断开连接问题解决。vscode远程服务器一直卡在正在打开远程状态问题解决。问题描述 1.连接超时 2.vscode远程一直卡在正在打开远程...原因分析&#xff1a;需要修改设置超时断…

Maven下载和配置-IDEA使用

目录 一 MAVEN 二 三个仓库 1. 本地仓库&#xff08;Local Repository&#xff09; 2. 私有仓库&#xff08;Private Repository&#xff0c;公司内部仓库&#xff09; 3. 远程仓库&#xff08;Remote Repository&#xff09; 依赖查找流程&#xff08;优先级&#xff09…

Dify实战应用指南(上传需求稿生成测试用例)

一、Dify平台简介 Dify是一款开源的大语言模型&#xff08;LLM&#xff09;应用开发平台&#xff0c;融合了“Define&#xff08;定义&#xff09; Modify&#xff08;修改&#xff09;”的设计理念&#xff0c;通过低代码/无代码的可视化界面降低技术门槛。其核心价值在于帮助…

学习日志35 python

1 Python 列表切片一、切片完整语法列表切片的基本格式&#xff1a; 列表[start:end:step]start&#xff1a;起始索引&#xff08;包含该位置元素&#xff0c;可省略&#xff09;end&#xff1a;结束索引&#xff08;不包含该位置元素&#xff0c;可省略&#xff09;step&#…

Linux -- 文件【下】

目录 一、EXT2文件系统 1、宏观认识 2、块组内部构成 2.1 Data Block 2.2 i节点表(Inode Table) 2.3 块位图&#xff08;Block Bitmap&#xff09; 2.4 inode位图&#xff08;Inode Bitmap&#xff09; 2.5 GDT&#xff08;Group Descriptor Table&#xff09; 2.6 超…

谷歌手机刷机和面具ROOT保姆级别教程

#比较常用的谷歌输入root面具教程,逆向工程师必修课程# 所需工具与材料清单 真机设备 推荐使用 Google Pixel 4 或其他兼容设备&#xff0c;确保硬件支持刷机操作。 ADB 环境配置 通过安装 Android Studio 自动配置 ADB 和 Fastboot 工具。安装完成后&#xff0c;需在系统环境…

平衡二叉搜索树 - 红黑树详解

文章目录一、红黑树概念引申问题二、红黑树操作一、红黑树概念 红黑树是一棵二叉搜索树&#xff0c;它在每个节点上增加了一个存储位用来表示节点颜色(红色或者黑色)&#xff0c;红黑树通过约束颜色&#xff0c;可以保证最长路径不超过最短路径的两倍&#xff0c;因而近似平衡…

从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.14

第十六天 第五十二&#xff0c;五十三&#xff0c;五十四&#xff0c;五十五和五十六集 第五十二集 文件包含 一个include命令只能指定一个被包含文件 文件允许嵌套&#xff0c;就是一个被包含的文件可以包含另一个文件。 文件名可以用尖括号或者双引号括起来 但是两种的查找方…

B+树索引分析:单表最大存储记录数

在现代数据库设计中&#xff0c;随着数据量的增加&#xff0c;如何有效地管理和优化数据库成为了一个关键问题。根据阿里巴巴开发手册的标准&#xff0c;当一张表预计在三年内的数据量超过500万条或者2GB时&#xff0c;就应该考虑实施分库分表策略 Mysql B树索引介绍 及 页内储…

三、memblock 内存分配器

两个问题&#xff1a; 1、系统是怎么知道物理内存的&#xff1f;linux内存管理学习&#xff08;1&#xff09;&#xff1a;物理内存探测 2、在内存管理真正初始化之前&#xff0c;内核的代码执行需要分配内存该怎么处理&#xff1f; 在Linux内核启动初期&#xff0c;完整的内存…

Python 桌面应用形态后台管理系统的技术选型与方案报告

下面是一份面向“Python 桌面应用形态的后台管理系统”的技术选型与方案报告。我把假设前提→总体架构→客户端技术选型→服务端与数据层→基础设施与安全→交付与运维→质量保障→里程碑计划→风险与对策→最小可行栈逐层给出。 一、前置假设 & 非功能目标 业务假设 典型…

Winsows系统去除右键文件显示的快捷列表

前言&#xff1a;今天重做了电脑系统&#xff0c;安装的是纯净版的系统。然后手动指定D盘安装了下列软件。&#xff08;QQ&#xff0c;迅雷&#xff0c;百度网盘&#xff0c;搜狗输入法&#xff0c;驱动精灵&#xff09;然后我右键点击桌面的软件快捷方式&#xff0c;出现了一排…

【Go】Gin 超时中间件的坑:fatal error: concurrent map writes

Gin 社区超时中间件的坑&#xff1a;导致线上 Pod 异常重启 在最近的项目中&#xff0c;我们遇到了因为 Gin 超时中间件&#xff08;timeout&#xff09; 引发的生产事故&#xff1a;Pod 异常退出并重启。 问题现场 pod无故重启&#xff0c;抓取标准输出日志&#xff0c;问题…

数据结构:用数组实现队列(Implementing Queue Using Array)

目录 第1步&#xff1a;设计蓝图 (The Struct) 第2步&#xff1a;队列的诞生 (创建与初始化) 第3步&#xff1a;状态检查 (判满与判空) 第4步&#xff1a;核心操作 (入队与出队) 入队 (Enqueue) 出队 (Dequeue) 第5步&#xff1a;善后工作 (销毁队列) 现在&#xff0c;我…

Boost库核心组件与应用

一、BOOST 库简介&#xff1a;C 开发者的 “扩展工具集” 在 C 编程领域&#xff0c;除了标准库&#xff08;STL&#xff09;外&#xff0c;BOOST 库是最具影响力的第三方库之一。它由全球数百位开发者共同维护&#xff0c;包含超过 160 个高质量的组件&#xff0c;覆盖从基础…

机器学习 [白板推导](十二)[卡曼滤波、粒子滤波]

15. 线性动态系统&#xff08;卡曼滤波&#xff0c;Kalman Filter&#xff09; 15.1. 概述 15.1.1. 背景介绍 变量随时间变化的系统叫做动态系统&#xff0c;其中隐变量取值离散的是隐马尔可夫模型&#xff08;HMM&#xff09;&#xff0c;而隐变量取值连续的分为线性动态系统…