基于uniapp的小程序canvas生成图片系列操作

uni-app:使用 Painter 在微信小程序将当前页面保存为图片 阅读详情

只是部分代码,方便自己后续快速查询

基础

  1. 要有基本的canvas盒子,由于api使用的都是px,建议通过样式表隐藏基本的canvas。(这里需要生成圆形头像,额外有一个canvas专门来生成)
	<canvas class="canvasBox" canvas-id="shareCanvas"></canvas>
    <canvas class="upHeadBox" canvas-id="shareUpHead"></canvas>
     <!-- canvas的宽高根据项目需求,最好和设计统一宽高,方便后续生成 -->
  1. 创建一个canvas的实例,在接下来生成图片的代码中将随时会调用,建议放在页面实例的变量中。
	data(){
		return{
			shareCanvas: uni.createCanvasContext('shareCanvas'),
	      	shareUpHead: uni.createCanvasContext('shareUpHead')
		}
	}
  1. 生成背景
	// 如果背景是要用图片的话直接调用下方api即可,图片的地址一定要是本地图片,网络图片需要下载下载再调用
	this.shareCanvas.drawImage('/static/images/myInvite/poster_bg.png', 0, 0, 630, 954); // x ,y , 宽, 高  
	// 如果是纯色背景矩形的话直接用这种方法
	this.shareCanvas.setFillStyle('#FFFFFF') // 声明填充颜色
	this.shareCanvas.fillRect(0, 0, 630, 954) // 画下白色矩形
  1. 生成圆角矩形
	/**
     * 绘制圆角矩形
     * @param {Object} ctx - canvas组件的绘图上下文
     * @param {Number} x - 矩形的x坐标
     * @param {Number} y - 矩形的y坐标
     * @param {Number} w - 矩形的宽度
     * @param {Number} h - 矩形的高度
     * @param {Number} r - 矩形的圆角半径
     * @param {String} [c = 'transparent'] - 矩形的填充色
     */
    roundRect(ctx, x, y, w, h, r, c = '#fff') {
      if (w < 2 * r) {
        r = w / 2;
      }
      if (h < 2 * r) {
        r = h / 2;
      }

      ctx.beginPath();
      ctx.fillStyle = c;

      ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
      ctx.moveTo(x + r, y);
      ctx.lineTo(x + w - r, y);
      ctx.lineTo(x + w, y + r);

      ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
      ctx.lineTo(x + w, y + h - r);
      ctx.lineTo(x + w - r, y + h);

      ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);
      ctx.lineTo(x + r, y + h);
      ctx.lineTo(x, y + h - r);

      ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
      ctx.lineTo(x, y + r);
      ctx.lineTo(x + r, y);

      ctx.fill();
      ctx.closePath();
    },
    // 直接穿好对应参数调用即可
  1. 生成圆形图片
	let imgSrc = '' // 你想要生成的原图地址
	this.shareUpHead.arc(50, 50, 50, 0, 2 * Math.PI);
	this.shareUpHead.clip();
	this.shareUpHead.drawImage(imgSrc, 0, 0, 100, 100);
	this.shareUpHead.draw();
	setTimeout(async () => {
        // canvas操作后最好延时生成图片,不然可能有问题
        let [error, res] = await uni.canvasToTempFilePath({
          x: 0,
          y: 0,
          width: 100,
          height: 100,
          destWidth: 100,
          destHeight: 100,
          canvasId: 'shareUpHead'
        });
        // 在H5平台下,tempFilePath 为 base64,小程序应该会是个临时的图片路径
        this.shareCanvas.drawImage(res.tempFilePath, 270, 262, 90, 90);
        this.setCanvasText();
      }, 400);
  1. 生成文字
	this.shareCanvas.textAlign = 'center'; // 居中文字,文字的x轴处于canvas的中间点即可
	this.shareCanvas.setFillStyle('#000'); // 文字颜色	
	this.shareCanvas.font = '32px Arial'; // 文字大小和文字字体
	this.shareCanvas.fillText('文字文字', 315, 388); // 文字, x轴坐标,y轴坐标
  1. 最后生成图片
	let [err, res] = await uni.canvasToTempFilePath({
	  x: 0, // 从canvas的x轴的0点开始选中
	  y: 0,// 从canvas的y轴的0点开始选中
	  width: 630, // 选中canvas多宽
	  height: 954, // 选中canvas多宽
	  destWidth: 630, // 生成的图片多宽
	  destHeight: 954, // 生成的图片多高
	  canvasId: 'shareCanvas' // canvas的id
	});
	let imgSrc = res.tempFilePath // 这个就是生成的图片路径了

暂时先写这些(太菜,肚子里没货了),如果还有什么有用(有趣也行)的生成方法欢迎大佬们帮我补充一下,感谢阅读

uniapp 小程序 APP 实现手写板 签名 画图 canvas 保存为图片格式 uniapp 小程序 APP 实现手写板 签名 画图 canvas 保存为图片格式一、手写板1.H5代码2.JS代码总结 uniapp 小程序 APP 实现手写板 签名 画图 canvas 保存为图片格式 最近自己弄了一个手写板 可以手写签名画图 踩过一些坑 幸运怕坑 分享给跟我遇到一样问题的小白们 适用于APP和小程序 一、手写板 效果如下图: 1.H5代码 代码如下(示例): <!-- 手写板组件 --> <view> <zwp-draw-pad 阅读详情

相关推荐

uniapp canvas绘图流程,从绘制图案到绘制文字,然后完成。还有一些方法的具体细节。

好的我们开始,uniapp绘制海报进行保存是我们经常需要制作的功能。而绘制海报,我们一般会绘制图片,绘制文字,绘制截取图片。 下面让我们来看下绘制一个海报的具体过程。 1、首先我们需要绘制图片 在canvas上绘制图片。我们需要用到一下代码 ctx.drawImage( 图片路径 , 0, 0, 244 * 1.22, 429 * 1.22); //绘制图 而该方法只支持绘制本地图片,包括本地...

qq_41231694的博客 1万+

【uniapp】微信小程序canvas签名旋转生成图片

实际测试过程中,会有画布大小的兼容性问题,具体表现为,在代码里设置的画布背景是白色,在某些屏宽(宽高比比iphone7还大)的iphone上,生成的图片可能会存在右侧一竖列区域(如果没做旋转处理实际上是图片的底部区域)是透明的情况,用图片指示一下。一般的签名是需要用户横屏手写的,但对手机来说实际是竖着写的,保存的图片也是按手机(竖长型)的样子来的,在pc端展示的话需要用css旋转才行,但若有后台生成pdf此类需求的话,那就不好去旋转图片了,为了一劳永逸还得从生成的源头控制才行。,便能曲线实现我们的需求。

rrrrroy_Ha的博客 8536

Uniapp 微信小程序前端生成海报并保存 解决方案

Uniapp 微信小程序前端生成海报并保存 解决方案

u014071833的博客 2994

uniapp小程序canvas生成图片

点击页面分享按钮时候,跳出弹出层 ,css完成页面 ,点击弹出层的保存到相册,能生成canvas画布,然后变为图片。在canvas画布外 添加父元素,让画布不可见。控制台打印生成图片链接。

qq_44184452的博客 2288

uniapp微信小程序生成分享海报(模板自取)

uniapp微信小程序生成分享海报

qq_47195437的博客 7204

uniapp生成商品分享海报

uniapp用canvas生成一个分享商品的海报 文章目录前言一、展示效果二、使用步骤1.HTML部分2.CSS部分3.JS部分总结 前言 uniapp用canvas生成一个分享商品的海报,因为用到了uni.downloadFile这个API,所以要注意图片在H5端跨域的问题。 以下是本篇文章正文内容 一、展示效果 大致效果就是这样,点击生成海报的按钮,会用canvas生成一张海报,长按可以保存到手机上。 二、使用步骤 1.HTML部分 代码如下: <!-- 生成海报的点击事件 -->.

qq_38541936的博客 6032

微信小程序-CANVAS写入图片素材、文字等数据生成图片

微信小程序-CANVAS写入图片素材、文字等数据生成图片 微信小程序中,CANVAS写入图片素材、文字等数据生成图片,最终可将生成的 base64 格式图片保存至相册操作 Tips: 1、canvas 标签默认宽度 300px、高度 150px canvas 生成图片时,写入图片素材、文字等数据前,需要根据实际需求,设置 canvas 宽、高, 如以下示例中 设置 posterCanvas.width 及 posterCanvas.height 2、同一页面中的 canvas-id 不可重复,如果

羽筠的博客 4062

uniapp之小程序端生成分享海报(带自定义参数的二维码)

getToken() { uni.showLoading({ title: '加载中', mask: true }) let APPID = 'wxbb79e27e89dd25ce' let APPSECRET = '9e891651373f472e7e73948f6ba06a11' uni.request({ url: `https://api.weixin.qq.co.

Jocelyn_书 1万+

小程序uniapp利用canvas生成海报并可以保存至相册

⏳看到上方代码,先是利用canvas生成图片,将图片展示出来,cavans元素移除屏幕外,这里可能有疑问为什么要这么做?直接用canvas元素来展示图片不好吗?为什么要用canvas生成的图片来显示呢?⏳这么做的原因其实是因为canvas在抖音小程序,微信小程序部分真机中没有动画过渡,当弹窗关闭时比较突兀,当然如果需求中没有动画过渡的要求,就不需要多这一步。

一颗松鼠 5279

uniapp中使用canvas生成海报,并下载保存到手机相册

如下图,是在H5中,canvas生成后的效果,首先说明,H5不支持返回图片的临时路径,不能用于保存,APP端生成成功后,会返回图片的临时路径用来保存到相册。本地测试,用的网络图片,没有出现跨域的问题,APP端也正常显示。 完整代码:可以将整个代码复制到你得uniapp项目中直接运行。代码中做了详细的注册,关于API的用法,这里只标注的简单的提示,具体还是参考 官方链接uniapp-canvas吧 <template> <view class="demo"> <c.

sunluyi的博客 3万+

uniapp中,H5端使用html2canvas生成海报

项目中H5需要实现canvas生成海报,于是用了html2canvas,中间各种BUG,其中跨域问题一直没有处理好,后台服务器设置了支持跨域也不可以。最后解决方案是,把网络图片全部转成base64展示,在调用html2canvas保存图片。APP端canvas的用法参考我的另一篇文章,uniapp中使用canvas,APP端支持生成海报并返回临时路径,用来保存到手机 <view class="pick poster" id="poster"> <!-- 这里边是你需要保存的页面样式,.

sunluyi的博客 6993

UniApp双端对比:H5用html2canvas vs 小程序手写Canvas生成图片全流程

本文详细解析了UniApp框架下H5与小程序平台Canvas绘图的完整解决方案,对比了H5使用html2canvas和小程序手写Canvas的技术差异与实现方法。通过代码示例和性能优化技巧,帮助开发者高效实现跨平台图片生成功能,提升应用开发效率。

rose2的博客 660

WorldQuant Brain Alpha 生成器

一个自动化工具,通过参数优化和回测来挖掘高质量的量化交易 Alpha 因子,并自动提交符合标准的因子。

weixin_37582383的博客 1万+

uniApp小程序保存图片canvas

<template> <view class="poster_box"> <!-- 显示的页面 --> <view class="myShare" > <image class="my_img" :src="app+'/yaoqing/bj.png'" mode=""></image> <view class="er_box"> <image class="er" :src="er" mo

peijiajing的博客 1152

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

华为Atlas 300I推理卡驱动安装全攻略:从环境检查到常见问题解决

本文提供了华为Atlas 300I推理卡驱动安装的完整实战指南。从安装前的系统环境检查、内核版本匹配,到详细的二进制.run文件安装步骤、源码编译及高级定制化部署,涵盖了驱动安装的全流程。文章重点解析了安装过程中的关键决策、常见问题排查与解决方案,并针对生产环境的多卡配置、性能调优及安全加固给出了专业建议,旨在帮助用户高效、稳定地完成AI推理加速卡的部署。

swift5iosmith的博客 628

uni保存canvas图片_uniapp或小程序利用canvas生成圆图

废话不说,直接上代码,首先是html部分注意canvas-id和id都需要写成一样的js部分import makeCircleImg from '@/utils/makeCircleImg.js'data() {return {testCircleImage: ''}},async onReady() {const imgUrl = 'http://localhost/static/img/ico...

weixin_29338423的博客 1570

AirSim安装和地图加载

详细教程如何安装AirSim并加载地图

fegxg的博客 3033

微信小程序 uniapp canvas 生成海报分享

在不断的采坑中 终于找到了答案 还是直接看代码吧 里面有备注 很清晰 有不懂得可以留言哦。 此代码是基于mpvue写的 一个组件 有用这个框架的可以直接用,微信小程序与这个相差不大,(只需改下事件监听方式,标签,参数传递就可以了),希望对大家有所帮助,谢谢 <template> <div> <div :class="['share', ...

weixin_43468902的博客 2217

物联网技术-第2章-物联网技术架构

• 物联网具有很强的异构性• 为实现异构设备之间的互联、互通与互操作,物联网需要以一个开放的分层的可扩展的为框架。

m0_73804764的博客 2976

详细解读经典跨模态对齐技术Q-Former代码

介绍BLIP2的博客层出不穷,介绍Q-Former的博客也不少,但是详细解读Q-Former代码的博客很少。这篇博客希望以代码为基础,讲明白Q-Former的原理和核心思想,并详细解读一些值得注意的细节。希望读者们能从这一经典技术中朝花夕拾,得到启发。

沉迷单车的追风少年 2459

小程序canvas生成海报(uniapp)

弹窗防止滑动和穿透 catchtouchmove='true' @touchmove.prevent="stopPrevent" stopPrevent() {}, 海报画布: <view class="poster" v-if="showposter" @click.stop.prevent="stopPrevent"> <canvas canvas-id="myCanvas" :style="'width:' + windowWidth + 'px;height:' +

weixin_45435854的博客 1009

133、神经渲染与AI RAW:从RAW域到sRGB的端到端学习

去年在调试某款旗舰手机的主摄时,遇到一个让人头疼的问题——夜景模式下,暗部细节虽然保留得不错,但色彩总是偏紫,而且高光边缘有诡异的“水彩感”。ISP的3A统计跑了几十版,降噪强度从0调到100,甚至把去马赛克算法换成了自适应方向插值,问题依旧。后来团队里一位做AI的同事说:“要不试试端到端?从RAW直接出sRGB。”当时我第一反应是“这玩意儿能稳定吗?”结果试了一版,偏紫消失了,高光边缘的伪影也没了。从那以后,我开始认真研究神经渲染与AI RAW这条路线。

sundong_81的博客 31

uniapp将uQRCode生成的二维码绘制到canvas中(仅限微信小程序)

通过uQRCode生成二维码,并绘制到canvas中

nothing_2020的博客 2304

二极管限幅电路和钳位电路

二极管限幅电路和钳位电路学习

HW-BASE的博客 928

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

canvas生成图片分享并保存相册【uniapp开发小程序项目】

canvas生成图片分享并保存相册 具体步骤描述: 添加画布 首先,在小程序里进行绘图操作需要用到组件,那我们就先在我们的wxml代码中放入<canvas>,然后,我们要开始写JS代码在这张画布上进行绘图操作。 代码如下: html代码: <template> <view class="mine"> <!-- //广告 触发分享打开分享弹窗,开始...

杜鲁阳的博客 1750

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 微信公众号——网页授权
下一篇: js中for循环的几种结束方法
時が止まる
博客等级 码龄8年 38粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值