uniapp純前端繪制商品分享圖

效果如圖
在這里插入圖片描述

// 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;而隱變量取值連續的分為線性動態系統…