【小程序】Canvas 画布分享海报

成品效果图

  • 可以通过切换下面图片形成不同的海报背景分享图
    在这里插入图片描述
<template><view>// type="2d"必须加<canvas type="2d" :style="{width:Artwidth+ 'px',height:Artheight + 'px', margin:'0 auto'}" canvas-id="firstCanvas"id="firstCanvas"> </canvas><view class="bootmbtn"><view class="save" @click="save">保存海报</view><scroll-view scroll-x="true" style="white-space: nowrap;width:100vw"><view class="botmbar" :class="current==1?'new':''" @click="getimg('/static/canvas/1.jpg',1)"><image src="/static/canvas/1.jpg" mode=""></image></view><view class="botmbar" :class="current==2?'new':''" @click="getimg('/static/canvas/2.jpg',2)"><image src="/static/canvas/2.jpg" mode=""></image></view><view class="botmbar" :class="current==3?'new':''" @click="getimg('/static/canvas/3.jpg',3)"><image src="/static/canvas/3.jpg" mode=""></image></view><view class="botmbar" :class="current==4?'new':''" @click="getimg('/static/canvas/4.jpg',4)"><image src="/static/canvas/4.jpg" mode=""></image></view></scroll-view></view></view>
</template><script>//接口获取二维码import {getCode,} from "@/common/api.js"export default {data() {return {dpr: 1,Artwidth: 0,Artheight: 0,w: 375,h: 500,shareimg: "",current: 1,ctx: "",};},onLoad() {this.openapply()},methods: {//立即推广openapply() {getCode().then(res => {if (res.code == 1) {this.shareimg = res.datathis.getimg("/static/canvas/1.jpg", 1)}})},getimg(IMG, index) {let that = thisthat.current = indexconst query = uni.createSelectorQuery().in(this)query.select("#firstCanvas").fields({node: true,size: true}).exec(res => {const {node: canvas} = res[0];console.log(canvas, 888)//绘制const ctx = canvas.getContext('2d');that.ctx = canvas//这一步为了画布转图片that.dpr = uni.getWindowInfo().pixelRatio || 1;canvas.width = that.w * that.dprcanvas.height = that.h * that.dprctx.clearRect(0, 0, canvas.width, canvas.height)that.Artwidth = that.wthat.Artheight = that.hctx.fillStyle= "#ffffff"ctx.fillRect(0, 0,canvas.width, canvas.height);console.log(canvas.width, canvas.height, 400 * that.dpr)//获取图片实例,去绘制const bgimage = canvas.createImage()bgimage.onload = () => {ctx.drawImage(bgimage, 0, 0, canvas.width, 400 * that.dpr)that.getcode(canvas, ctx)}bgimage.src = IMG})},// 绘制二维码getcode(canvas, ctx) {let that = thisconst bgimage = canvas.createImage()bgimage.onload = () => {ctx.drawImage(bgimage, (that.w - 105) * that.dpr, (that.h - 90) * that.dpr, 88 * that.dpr, 88 *that.dpr)that.getlogo(canvas, ctx)}bgimage.src = that.shareimg},//绘制 logogetlogo(canvas, ctx) {let that = thisconst bgimage = canvas.createImage()bgimage.onload = () => {ctx.drawImage(bgimage, 24 * that.dpr, (that.h - 90) * that.dpr, 88 * that.dpr, 88 * that.dpr)that.getfont(canvas, ctx)}bgimage.src = '/static/2.png'},// 绘制文字getfont(canvas, ctx) {let that = thisctx.fillStyle= "#000000"ctx.font = '42px "微软雅黑"';ctx.fillText('小程序', 130 * that.dpr, (that.h - 45) * that.dpr)ctx.fillStyle = "red";ctx.scale(that.dpr, that.dpr);},//保存save() {let that = thissetTimeout(() => {uni.canvasToTempFilePath({canvas: that.ctx, // 使用2D 需要传递的参数success: function(res) {// 在H5平台下,tempFilePath 为 base64console.log(res.tempFilePath)uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function(res2) {uni.showToast({title: "保存成功,请从相册选择再分享",icon: "none",duration: 5000,});},fail: function(err) {uni.hideLoading();// console.log(err.errMsg);},});},fail(err) {console.log(err)}})}, 1000)}}}
</script><style lang="scss">.bootmbtn {position: fixed;bottom: 0;left: 0;height: 380rpx;padding: 24rpx 0 32rpx 32rpx;border-top: 4rpx #d8d3cf solid;}.botmbar {margin-top: 12rpx;display: inline-block;width: 310rpx;height: 310rpx;margin-right: 24rpx;text-align: center;line-height: 320rpx;image {width: 300rpx;height: 300rpx;}}.new {border: 3px solid #000000;box-sizing: border-box;}.save {// position: fixed;// bottom: 240rpx;// right: 24rpx;margin: 0 auto;width: 248rpx;height: 80rpx;line-height: 80rpx;border-radius: 80rpx;opacity: 1;background: #a91e25;opacity: 1;color: #ffffff;font-size: 30rpx;font-weight: 600;font-family: "PingFang SC";text-align: center;}
</style>

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

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

相关文章

神码ai伪原创【php源码】

大家好&#xff0c;小编为大家解答python必备常用英语词汇笔记的问题。很多人还不知道python中常用的英语单词&#xff0c;现在让我们一起来看看吧&#xff01; 火车头采集ai伪原创插件截图&#xff1a; 一.什么是注释 注释是对一段代码的解释&#xff0c;不参与程序运行&…

信息安全技术工业控制系统安全控制应用指南学习笔记

工业控制系统安全控制基线 根据工业控制系统在国家安全、经济建设、社会生活中的重要程度&#xff0c;遭到破坏后对国家安全、社会秩序、公共利益以及公民、法人和其他组织的合法权益的危害程度等&#xff0c;结合信息安全等级保护标准划分及实施效果分析&#xff0c;结合工业…

Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权)

一.Sql server还原失败(数据库正在使用,无法获得对数据库的独占访问权) 本次测试使用数据库实例SqlServer2008r2版 错误详细&#xff1a; 标题: Microsoft SQL Server Management Studio ------------------------------ 还原数据库“Mvc_HNHZ”时失败。 (Microsoft.SqlServer.…

Android 开发者选项日志存储路径

android开发者选项中存在两个item是关于系统日志的。 1.日志记录器缓冲区大小 2.在设备上永久存储日志记录器数据 一个是用来设置缓冲区大小&#xff0c;一个是用来日志存储开关及过滤。 通过分析 system/core/logcat/logcatd.rc mkdir /data/misc/logd 0770 logd log 日志的…

机器学习参数调优

手动调参 分析影响模型的参数&#xff0c;设计步长进行交叉验证 我们以随机森林为例&#xff1a; 本文将使用sklearn自带的乳腺癌数据集&#xff0c;建立随机森林&#xff0c;并基于泛化误差&#xff08;Genelization Error&#xff09;与模型复杂度的关系来对模型进行调参&…

js:Markdown编辑器Vue3版本md-editor-v3

文档 https://github.com/imzbf/md-editor-v3https://imzbf.github.io/md-editor-v3/zh-CN/index 安装 npm install md-editor-v3使用 <template><MdEditor v-model"text" /> </template><script setup> import { ref } from vue; impor…

技术应用:Docker安全性的最佳实验|聊聊工程化Docker

&#x1f525; 技术相关&#xff1a;《技术应用》 ⛺️ I Love you, like a fire! 文章目录 首先&#xff0c;使用Docker Hub控制访问其次&#xff0c;保护密钥写在最后 不可否认&#xff0c;能生存在互联网上的软件都是相互关联的&#xff0c;当我们开发一款应用程序时&#x…

Java——基础语法(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

Fabric系列 - 知识点整理

知识点 源码编译 主机编译 容器编译 手动部署(docker-compose) 单peer 多peer 中途加peer 多主机多peer 链码 语法, 接口 (go版) 命令行调用 ca server 在DApp中使用SDK调用 (js版) 部署的几个阶段 部署1排序和1节点, 1组织1通道 光部署能Dapp 带ca server (每个组织一个)…

山东布谷科技直播系统源码热点分析:不同芯片实现高质量编码与渲染视频的GPU加速功能

在现代科技的迅猛发展下&#xff0c;直播系统源码平台被开发搭建出来&#xff0c;为人们的生活方式带来了很大的改变&#xff0c;直播系统源码平台的好友、短视频、直播、社区等功能让很多人越来越热衷于去在平台上刷视频、看直播、分享生活。用户的喜爱也督促了直播系统源码平…

SpringBoot 2.1.7.RELEASE + Activiti 5.18.0 喂饭级练习手册

环境准备 win10 eclipse 2023-03 eclipse Activiti插件 Mysql 5.x Activiti的作用等不再赘叙&#xff0c;直接上代码和细节 POM <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId>…

C#之控制台版本得贪吃蛇

贪吃蛇小时候大家都玩过&#xff0c;具体步骤如下: 1.给游戏制造一个有限得空间。 2.生成墙壁&#xff0c;小蛇碰撞到墙壁或者咬到自己的尾巴&#xff0c;游戏结束。 3.生成随机的食物。 4.吃掉食物&#xff0c;增加自身的体长&#xff0c;并生成新的食物。 具体代码如下&…