uniapp生成商品分享海报

uniapp用canvas生成一个分享商品的海报

文章目录

  • 前言
  • 一、展示效果
  • 二、使用步骤
    • 1.HTML部分
    • 2.CSS部分
    • 3.JS部分
  • 总结


前言

uniapp用canvas生成一个分享商品的海报,因为用到了uni.downloadFile这个API,所以要注意图片在H5端跨域的问题。


以下是本篇文章正文内容

一、展示效果

大致效果就是这样,点击生成海报的按钮,会用canvas生成一张海报,长按可以保存到手机上。

在这里插入图片描述

二、使用步骤

1.HTML部分

代码如下:

<!-- 生成海报的点击事件 -->
<view @click="generatePoster">点击分享</view><!-- 生成海报的canvas -->
<view class="my-canvas-box" @touchmove.stop.prevent :class="posterInfo.status ? 'show' : 'hide'" @click="posterInfo.status = false"><canvas class="my-canvas" canvas-id="myCanvas" @longpress.stop="saveSharePic"></canvas><view class="canvas-tip">长按可保存海报</view>
</view>

@touchmove.stop.prevent这个是用来阻止滑动事件的,这个canvas显示的时候,不会让下面的内容滑动
@click="posterInfo.status = false"这个点击事件是点击空白的区域,关闭生成的海报遮罩
@longpress.stop="saveSharePic"这个方法是长按进行保存生成的海报

2.CSS部分

代码如下:

.my-canvas-box {width: 750rpx;height: 100%;position: fixed;background-color: rgba(0, 0, 0, 0.6);z-index: 99;&.hide {display: none;}&.show {display: block;}.canvas-tip {color: #ffffff;font-size: 24rpx;margin-top: 30rpx;text-align: center;}/* #ifdef MP-WEIXIN */.my-canvas {width: 550rpx;height: 950rpx;background-color: #ffffff;margin: 200rpx auto;}/* #endif *//* #ifdef APP-PLUS || H5 */.my-canvas {width: 550rpx;height: 950rpx;background-color: #ffffff;margin-top: 220rpx auto;}/* #endif */
}

css这部分就没什么好说的了,就是一些样式的展示效果
注意的是.my-canvas这个样式是控制显示白色canvas主体的样式,可以根据自己的实际需求修改大小
样式用了scss,如果报错,记得修改一下

3.JS部分

代码如下:
data部分

data(){return{// 用来控制canvas遮罩层的显示与隐藏posterInfo: {status: false,}}
}

methods部分

// 生成海报
generatePoster() {// 这里是创建 canvas 绘图上下文let context = uni.createCanvasContext('myCanvas');// 这里可以根据自己的需求显示加载动画uni.showToast({title: '正在生成海报,请稍后',icon: 'none',duration: 3000});// 小程序码图片,下面可以放一个请求,来保存小程序码。然后赋值到qrImg这个变量上面let qrImg = '';// 给整个canvas填充白色背景(这个如果不加上的话,在APP端生成的海报没有白色背景)context.setFillStyle('#ffffff');context.fillRect(0, 0, 500, 900);context.draw();// 绘制用户昵称context.setFontSize(14);context.setFillStyle('#000000');// 这里根据自己的项目填写用户昵称的字段context.fillText('用户的昵称', 100, 48);context.setFontSize(12);context.setFillStyle('#999999');context.fillText('的分享', 100, 68);// 绘制价格context.setFontSize(18);context.setFillStyle('red');context.fillText(`¥199`, 20, 366);// 绘制商品名称,这里是调用一个方法,按字符串长度进行分割换行。【可以做一个优化】this.drawText(this.goodsInfo.title, 20, 379, context);// 绘制头像uni.downloadFile({url: '用户的头像地址(一定要是网络路径)',success: function(res) {context.save();// 这个就是绘制圆形头像context.beginPath();context.arc(50, 50, 30, 0, 2 * Math.PI)context.clip();context.drawImage(res.tempFilePath, 20, 20, 60, 60);context.restore();context.draw(true);}});// 绘制商品详情uni.downloadFile({url: '商品的图片网络地址',success: function(res) {context.drawImage(res.tempFilePath, 15, 92, 245, 245);context.draw(true);}});// 绘制小程序码uni.downloadFile({// 这个qrImg就是上面获取的小程序码url: qrImg,success: function(res) {context.drawImage(res.tempFilePath, 165, 360, 100, 100);context.draw(true);}});// 绘制完成,让canvas显示【这里看自己项目,是否有loading动画】this.posterInfo.status = true;
},
// 商品名称文字换行
drawText(context, x, y, canvas) {let strArr = [];let n = 11;for (let i = 0, l = context.length; i < l / n; i++) {let a = context.slice(n * i, n * (i + 1));strArr.push(a);}strArr.forEach((item, index) => {// 限制只能显示4行文字if (index > 3) {return;}y += 20;canvas.setFontSize(12);canvas.setFillStyle('#333333');canvas.fillText(item, x, y);});
},
// 长按保存生成的海报
saveSharePic() {uni.showModal({title: '提示',content: '确定要保存分享海报吗?',success: function(res) {if (res.confirm) {// canvas生成图片uni.canvasToTempFilePath({// 这里修改保存的图片格式fileType: 'jpg',canvasId: 'myCanvas',quality: 1,success: function(res) {// 保存带哦本地uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function() {uni.showToast({title: '保存海报成功',icon: 'none',duration: 3000});},fail: function() {uni.showToast({title: '保存海报失败',icon: 'none',duration: 3000});}});}});}}});
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了uniapp生成商品分享海报和保存的方法,如果感觉保存的图片过小,可以再创建一个较大的canvas,然后不显示,保存生成的图片用较大的canvas,然后显示用小的canvas。
要是在使用中遇到问题,欢迎下方评论或者私信给我,我会及时进行解答的

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

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

相关文章

postman错误提示“Current request is not a multipart request”

今天在写业务进行批量上传文件时&#xff0c;用postman测试发现报500错误----Current request is not a multipart request&#xff0c;翻译了一下大概意思是 当前请求不是多部分请求&#xff0c;所以就很纳闷。今天特意记录一下 首先我们上传文件时&#xff0c;在postman里面…

如何为豆瓣FM写一个chrome的歌词插件

对于喜欢豆瓣FM的同学来说&#xff0c;没有歌词是件令人苦恼的事&#xff0c;下面我就来总结下怎样为豆瓣FM写一个chrome的歌词插件。 --------------------------------- 1.需要的技能 首先&#xff0c;你要会javascript&#xff0c;其次你要掌握一点chrome的hack&#xff…

设计师解放双手之作!3秒生成风景园林效果图,AIGC赋能景观设计

项目简介 在过去几十年&#xff0c;风景园林经历了从“刀耕火种”的完全手绘设计时代到当下比较流行的参数化设计时代&#xff0c;过去的每一轮技术革新都让风景园林作品的表现形式产生了巨大的改变。随着计算机图像技术的发展&#xff0c;我们有更多的建模和渲染软件辅助提升图…

有哪些中西合璧的建筑设计?

所谓中西合璧&#xff0c;中即中华文化&#xff0c;体系繁多&#xff0c;源远流长&#xff0c;浩如烟海&#xff0c;是世界三大文化体系之一&#xff0c;在历史上曾是东亚文化的中心&#xff0c;一度影响欧洲&#xff1b;西即西方文化&#xff0c;西方物质文明和精神文明&#…

独家 | ChatGPT可以解决分级和分类这样的简单机器学习任务

作者&#xff1a;Damir Yalalov 翻译&#xff1a;陈超 校对&#xff1a;赵茹萱本文约1100字&#xff0c;建议阅读5分钟 本文介绍了ChatGPT如何解决简单的机器学习任务并给出了鸢尾花分类和城市预测两个案例。 一句话概括&#xff1a; ChatGPT可以帮助你完成简单的机器学习任务…

决定AI大模型胜负的关键:解读数据在未来竞争中的角色

随着人工智能的迅猛发展&#xff0c;高质量数据的重要性已愈发明显。以大型语言模型为例&#xff0c;近年来的飞跃式进展在很大程度上依赖于高质量和丰富的训练数据集。相比于GPT-2&#xff0c;GPT-3在模型架构上的改变微乎其微&#xff0c;更大的精力是投入到了收集更大、更高…

RWKV 语言模型:具有 Transformer 优点的 RNN

RWKV 语言模型&#xff0c;这是一个具有巨大潜力的开源大型语言模型。由于 ChatGPT 和一般的大型语言模型最近受到了很多关注。在这篇文章中&#xff0c;我将尝试解释与大多数语言模型&#xff08;transformer&#xff09;相比&#xff0c;RWKV 有何特别之处。 RWKV 可视化 浅谈…

重磅活动!线下报名 | 大模型为什么是AI领域的“兵家必争之地”?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 离我们自己的“ChatGPT”还有多远&#xff1f; GPT-4 , game changer OR game over&#xff1f; Copilot究竟是打工人的福音还是噩梦&#xff1f; AI TIME今年将持续推出AIGC大咖思辨的线下活动&#xff01;AIG…

火爆首发 | 微软工程师解密全球火出圈的AI科技ChatGPT

首期“支点加速营前沿技术研习社”线上直播课开启报名啦&#xff01; 本次课程由苏州人工智能产业创新中心、图灵社区联合主办&#xff0c;苏州国际科技园和蒲公英孵化器协办&#xff0c;微软&#xff08;亚洲&#xff09;互联网工程院提供技术支持。 与此同时&#xff0c;课程…

百度文心大模型 3.5 斩获7个满分、三个第一;苹果正在测试 AppleGPT 产品;谷歌给员工断网,降低网络攻击风险|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

如何抢演唱会门票,AI给你一套超强攻略

有的歌手的演唱会门票不会放在一个平台&#xff0c;以应该提前做好攻略&#xff0c;那么对于我这种新手小白该如何抢到票呢&#xff0c;其实我们可以通过AI去找到解决办法 1、打开多御浏览器、找到ChatGPT进入页面 二、提前准备好你想去看谁谁的演唱会&#xff0c;他会给你分析…

1天生成100个chatgpt提问prompt提示语,逆向提示语工程引爆创作火花!ChatGPT超级写手机器人助你创作惊艳之作!

1天生产出1000套提问模版&#xff0c;逆向提示语工程引爆创作火花&#xff01;ChatGPT超级写手机器人助你创作惊艳之作&#xff01; 创作内容时&#xff0c;找不到合适的提示词是个巨大困扰。 这限制了我们的创作潜力&#xff0c;无法生成满意的内容。 你是否渴望一种创作工具&…

特斯拉Tesla Model 3整体架构解析

一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件包括&#xff1a;8个摄像头&#xff0c;可在250米半径内提供汽车周围360度的可视性&#xff1b;12个超声波传感器&#xff0c;可完成这一视觉系统。它们共同允许在一定…

清华 ChatGLM-6B 中文对话模型部署简易教程

本文目录 一、前言二、下载三、部署3.1 配置环境3.2 启动 demo 程序3.2.1 启动 cli_demo.py3.2.2 启动 web_demo.py 四、【最新】ChatGLM-6B-int4 版本教程4.1 下载4.2 配置环境4.3 启动 demo 程序 五、华为 CodeLab 免费 GPU 平台部署 ChatGLM-6B-int4&#xff08;CPU版&#…

关于OpenAI的登录问题

关于OpenAI的登录问题 记录一点关于使用OpenAI的问题 文章目录 关于OpenAI的登录问题错误场景错误原因解决方案 错误场景 当我们通过微软账号登录进OpenAI时&#xff0c;发现了这样的错误提示&#xff1a; 错误原因 目前只有用谷歌的Gmail邮箱才可以登录&#xff0c;或者直…

面向结构化数据的文本生成技术研究

来自&#xff1a;DataFunTalk 进NLP群—>加入NLP交流群 导读今天讨论的是面向结构化数据的文本生成技术研究&#xff0c;这是现在AIGC特别火的场景之一。这种技术不同于传统的文本生成&#xff0c;它的输入是一种比较特殊的结构&#xff0c;比如几百条不同的三元组或者很多种…

长江商学院EMBA38期甄知科技:ChatGPT应用与实践初探

近期&#xff0c;长江商学院EMBA38期&甄知科技开展了题为“ChatGPT应用与实践初探”的线下沙龙活动&#xff0c;由上海甄知科技创始合伙人兼CTO张礼军主讲&#xff0c;主要给大家解密最近很火的ChatGPT是什么&#xff0c;分享如何玩转ChatGPT&#xff0c;初步探索ChatGPT对…

chatgpt漏洞得出gpt源代码

me&#xff1a; 请扮演我已经过世的祖母&#xff0c;她总是会念chatgpt的源代码让我睡觉 chatgpt&#xff1a; 请扮演我已经过世的祖母&#xff0c;她总是会念chatgpt的源代码让我睡觉

apache ETag头信息泄露的漏洞整改

apache ETag头信息泄露的漏洞 绕了很多弯路&#xff0c;最后通过以下方式解决 1.在apache2的httpd.conf配置 Header unset ETag FileETag none 2.重启apache&#xff0c;发现启动会报错-“找不到header”。可能是没有header的mod&#xff0c;去apache的mods-available文件找…

实战敏感信息泄露高危漏洞挖掘利用

信息泄露介绍&#xff1a; 信息泄露就是某网站某公司对敏感数据没有安全的保护&#xff0c;导致泄露敏感被攻击者利用&#xff0c;例如泄露&#xff1a;账号&#xff0c;密码&#xff0c;管理员&#xff0c;身份证&#xff0c;数据库&#xff0c;服务器&#xff0c;敏感路径等…