uniapp 使用cavans 生成海報

uniapp 使用cavans 生成海報

npm install qs-canvas

1.創建 useCanvas.js

/*** Shopro + qs-canvas 繪制海報* @version 1.0.0* @author lidongtony* @param {Object} options - 海報參數* @param {Object} vm - 自定義組件實例*/
import QSCanvas from 'qs-canvas';
import { getPosterData } from './poster';export default async function useCanvas(options, vm) {const width = options.width;const qsc = new QSCanvas({canvasId: options.canvasId,width: options.width,height: options.height,setCanvasWH: (canvas) => {options.height = canvas.height;},},vm,);let drawer = getPosterData(options);// 繪制背景圖const background = await qsc.drawImg({type: 'image',val: drawer.background,x: 0,y: 0,width,mode: 'widthFix',zIndex: 0,});await qsc.updateCanvasWH({width: background.width,height: background.bottom,});let list = drawer.list;for (let i = 0; i < list.length; i++) {let item = list[i];// 繪制文字if (item.type === 'text') {await qsc.drawText(item);}// 繪制圖片if (item.type === 'image') {if (item.d) {qsc.setCircle({x: item.x,y: item.y,d: item.d,clip: true,});}if (item.r) {qsc.setRect({x: item.x,y: item.y,height: item.height,width: item.width,r: item.r,clip: true,});}await qsc.drawImg(item);qsc.restore();}// 繪制二維碼if (item.type === 'qrcode') {await qsc.drawQrCode(item);}}await qsc.draw();// 延遲執行, 防止不穩定setTimeout(async () => {options.src = await qsc.toImage();}, 100);return options;
}

index.vue

<template><canvasclass="hideCanvas":canvas-id="poster.canvasId":id="poster.canvasId":style="{height: poster.height + 'px',width: poster.width + 'px',}"/></template><script setup>import useCanvas from './useCanvas';const props = defineProps({shareInfo: {type: Object,default() {},},});const Sys = uni.getSystemInfoSync();const poster = reactive({canvasId: 'canvasId',width: Sys.device.windowWidth * 0.9,height: 600,src: '',});async function getPoster() {poster.src = '';poster.shareInfo = props.shareInfo;// #ifdef APP-PLUSposter.canvasId = 'canvasId-' + new Date().getTime();// #endifconst canvas = await useCanvas(poster, vm);return canvas;}
</script>

poster/index.js

import user from './user';
export function getPosterData(options) {switch (options.shareInfo.poster.type) {case 'user':return user(options);}
}export function formatImageUrlProtocol(url) {// #ifdef H5// H5平臺 https協議下需要轉換if (window.location.protocol === 'https:' && url.indexOf('http:') === 0) {url = url.replace('http:', 'https:');}// #endif// #ifdef MP-WEIXIN// 小程序平臺 需要強制轉換為https協議if (url.indexOf('http:') === 0) {url = url.replace('http:', 'https:');}// #endifreturn url;
}

需要不同的海報 就創建不同 js 文件 存放你需要畫的那些元素
poster/user.js

import { formatImageUrlProtocol } from './index';const user = (poster) => {const width = poster.width;//你需要拼接的參數const userInfo = {};return {background: formatImageUrlProtocol('httpxxxxxxxx'),list: [{name: 'nickname',type: 'text',val: userInfo.nickname,x: width / 2,y: width * 0.4,paintbrushProps: {textAlign: 'center',fillStyle: '#333',font: {fontSize: 14,fontFamily: 'sans-serif',},},},{name: 'avatar',type: 'image',val: formatImageUrlProtocol('httpxxxxxx'),x: width * 0.4,y: width * 0.16,width: width * 0.2,height: width * 0.2,d: width * 0.2,},// #ifndef MP-WEIXIN{name: 'qrcode',type: 'qrcode',val: poster.shareInfo.link,x: width * 0.35,y: width * 0.84,size: width * 0.3,},// #endif// #ifdef MP-WEIXIN{name: 'wxacode',type: 'image',val: 'httpxxxxxxxxxxx',x: width * 0.35,y: width * 0.84,width: width * 0.3,height: width * 0.3,},// #endif],};
};export default user;

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38382.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38382.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38382.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NVIDIA Visual Profiler啟動失敗報錯

在銀河麒麟V10安裝完NVIDIA后&#xff0c;想著試著運行一下NVIDIA Visual Profiler&#xff0c;發現報錯&#xff0c;如下圖。 照著提示翻閱日志文件。看見其中寫著 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

簡介 其提供了并發處理事件的能力 結構 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R學習資源及R包安裝

轉自生信師兄 生信必備技巧之R語言基礎教程 1. 學習資源 推薦書籍&#xff1a;R語言實戰&#xff0c;R數據科學等等&#xff1b; 這兩本書在公眾號【生信師兄】都有pdf版&#xff0c;有需要的可以關注公眾號【生信師兄】并回復&#xff1a;“R語言”&#xff0c;即可獲得免費…

【自然語言處理】預訓練語言模型實現與應用

預訓練語言模型實現與應用 1 任務目標 1.1 案例簡介 ? 2018年&#xff0c;Google提出了預訓練語言模型BERT&#xff0c;該模型在各種NLP任務上都取得了很好的效果。與此同時&#xff0c;它的使用十分方便&#xff0c;可以快速地對于各種NLP任務進行適配。因此&#xff0c;B…

《每天5分鐘用Flask搭建一個管理系統》第8章:權限管理

第8章&#xff1a;權限管理 8.1 權限管理的概念 權限管理是控制用戶對應用內不同資源訪問的機制。它確保用戶只能訪問他們被授權的資源。 8.2 Flask-Principal擴展的使用 Flask-Principal是一個提供權限管理功能的Flask擴展&#xff0c;它允許您定義角色和權限&#xff0c;…

基于HarmonyOS NEXT開發智能提醒助手

目錄 目錄 目錄 前言 關于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手設計 1、系統架構 2、功能模塊 智能提醒助手的應用場景 智能提醒助手的競爭力 具體技術實現 未來展望 結束語 前言 隨著智能設備的普及和物聯網技術的飛速發展&#xff0c;人們對于智能…

基于大津閾值法和二值化與聯通區域標記進行圖像目標計數

1 建模 A.讀取圖像&#xff1a; 1.使用imread函數讀取圖像文件。 2.如果圖像是彩色的&#xff0c;通常需要先轉換為灰度圖像&#xff0c;因為大津閾值法通常應用于灰度圖像。 B.灰度化&#xff1a; 1&#xff0e;如果圖像是彩色的&#xff0c;使用rgb2gray函數將其轉換為灰度…

《昇思25天學習打卡營第16天 | 昇思MindSpore基于MobileNetv2的垃圾分類》

16天 本節學習了垃圾分類代碼開發的方法。通過讀取本地圖像數據作為輸入&#xff0c;對圖像中的垃圾物體進行檢測&#xff0c;并且將檢測結果圖片保存到文件中。 MobileNet網絡是由Google團隊于2017年提出的專注于移動端、嵌入式或IoT設備的輕量級CNN網絡&#xff0c;相比于傳…

Excel顯示/隱藏批注按鈕為什么是灰色?

在excel中&#xff0c;經常使用批注來加強數據信息的提示&#xff0c;有時候會把很多的批注顯示出來&#xff0c;但是再想將它們隱藏起來&#xff0c;全選工作表后&#xff0c;“顯示/隱藏批注”按鈕是灰色的&#xff0c;不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

【考研408計算機組成原理】微程序設計重要考點指令流水線考研真題+考點分析

蘇澤 “棄工從研”的路上很孤獨&#xff0c;于是我記下了些許筆記相伴&#xff0c;希望能夠幫助到大家 目錄 微指令的形成方式 微指令的地址形成方式 對應考題 題目&#xff1a;微指令的地址形成方式 - 斷定方式 解題思路&#xff1a; 答題&#xff1a; 分析考點&…

每日疑問,多線程場景,下面的代碼是否可以保證只執行一次

看著這個代碼的目的是只注冊一次sighandler&#xff0c;但是這個判定是否可以保證一次&#xff1f;但是根據代碼看&#xff0c;其實不會有關鍵區的讀寫&#xff0c;所以即使有同步問題&#xff0c;也不會產生什么特別的影響。所以代碼沒有問題&#xff0c;但是這是一個坑。 in…

Spring Boot中的分頁與排序實現

Spring Boot中的分頁與排序實現 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;在開發Web應用時&#xff0c;分頁和排序是常見的功能需求&#xff0c;特別是在處…

計算機體系結構和指令系統

1.計算機體系結構 - 五大部件 - 馮 諾依曼 計算機的特點 1.計算機有五大部件組成 2.指令和數據以同等地位存儲于存儲器&#xff0c;可按照地址訪問 3.指令和數據用二進制表示 4.指令由操作碼和地址碼組成 5。存儲程序 6.以計算器為中心&#xff08;輸入、輸出設備與存儲器…

2024年【湖北省安全員-C證】新版試題及湖北省安全員-C證試題及解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 湖北省安全員-C證新版試題參考答案及湖北省安全員-C證考試試題解析是安全生產模擬考試一點通題庫老師及湖北省安全員-C證操作證已考過的學員匯總&#xff0c;相對有效幫助湖北省安全員-C證試題及解析學員順利通過考試…

WIN10系統自帶錄屏軟件怎么用?

WIN10系統自帶錄屏軟件怎么用&#xff1f; WIN10系統錄屏軟件怎么用&#xff1f; 第一步&#xff1a;WING 快捷打開系統自帶錄屏軟件&#xff0c;如下&#xff1a; 第二步&#xff1a;點擊錄屏軟件區域“開始錄制”按鈕進入屏幕錄制狀態&#xff0c;如下&#xff1a; 第三步…

基于SpringBoot的財務管理系統

根據您提供的論文內容和模板要求&#xff0c;以下是定制化的文章輸出&#xff1a; 你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a; Java 數據庫&#xff1a; MySQL 技術&#xff1a; SpringBoot…

某度,網盤免費加速,復活!

哈嘍&#xff0c;各位小伙伴們好&#xff0c;我是給大家帶來各類黑科技與前沿資訊的小武。 有小伙伴反饋之前如下夸克網盤腳本的加速方法失效&#xff0c;小武今天測試&#xff0c;依舊正常使用&#xff01; 百度/迅雷/夸克&#xff0c;網盤免費加速&#xff0c;已破&#xf…

pytest測試框架pytest-cov插件生成代碼覆蓋率

Pytest提供了豐富的插件來擴展其功能&#xff0c;本章介紹下pytest-cov插件&#xff0c;用于生成測試覆蓋率報告&#xff0c;幫助開發者了解哪些部分的代碼被測試覆蓋&#xff0c;哪些部分還需要進一步的測試。 pytest-cov 支持多種報告格式&#xff0c;包括純文本、HTML、XML …

node中使用mysql

在nodeJs中mysq的基礎用法 mysql基礎 增刪改查 const mysql require(mysql)const connection mysql.createConnection({host: localhost, // 數據庫的IP地址port: 3306, // 端口號user: root, // 登錄數據庫的賬號password: 123456, // 登錄數據庫的密碼database: test, // 指…

JavaScript高級程序設計(第四版)--學習記錄之迭代器與生成器(下)

生成器 生成器是 ECMAScript 6 新增的一個極為靈活的結構&#xff0c;擁有在一個函數塊內暫停和恢復代碼執行的能力。 生成器基礎 生成器的形式是一個函數&#xff0c;函數名稱前面加一個星號表示它是一個生成器。 //生成器函數聲明 function* generatorFn(){} //生成器函數表…