uniapp中canvas绘制图片内容空白报错原因总结

news/2025/2/22 18:33:52/

uniapp中canvas绘制图片内容空白报错原因总结,看完需要10分钟

问题图: 

 

 效果图:

 

目录

 🧨🧨🧨首先定义画布canvas

        canvas画布初始值没有,导致没有绘制成功

 🧨🧨🧨2.绘制图片没有放到wx.draw方法里面

🧨🧨🧨3.Failed to execute ‘toDataURL’ on ‘HTMLCanvasElement’: Tainted canvases may not be exported.

🧨🧨🧨上面的都加了还存在,必杀技,延迟方法:


Canvas绘制图片流程
简单说一下canvas上绘制图片的过程

🧨先调用相机接口拍摄照片,

🧨把照片URL拿到,

🧨然后获取照片URL信息宽高,

🧨把宽高给画布,
🧨使用canvas的drawImage API把图片绘制到canvas上,
🧨绘制方法执行完成后把这个canvas导出为图片,并上传到服务器,至此流程结束。

 🧨🧨🧨首先定义画布canvas


<canvas class="canvas" canvas-id="canvas":style="{ height: canvasHeight + 'px', width: canvasWidth + 'px'  }"></canvas>

 🧨🧨🧨1.画布的大小大于了图片的大小导致了生成的内容是空白的,

        canvas画布初始值没有,导致没有绘制成功

解决:

 //默认初始值   canvasWidth1  canvasHeight1data() {return {ctx: null,canvasWidth: 1080,canvasHeight: 1440,}},

 🧨🧨🧨2.绘制图片没有放到wx.draw方法里面

wx.draw(false, () =>{wx.canvasToTempFilePath({x: 0,y: 0,canvasId: 'shareCanvas',  // shareCanvas 为制定 绘图canvas 的IDsuccess: (res) => {this.storeImgPath = res.tempFilePath....写入生成完成的逻辑},complete: (res) => {wx.hideLoading()}})
})

🧨🧨🧨3.Failed to execute ‘toDataURL’ on ‘HTMLCanvasElement’: Tainted canvases may not be exported.

报错信息 canvas无法执行toDataURL方法,受污染的画布无法输出

 受限于CORS 策略,会存在跨域问题,页面虽然可以使用跨域的图片(比如使用img标签或者append到页面上),因为浏览器本身不会有跨域问题,但是一旦绘制到canvas上就会污染这个canvas,导致无法提取到这个canvas的数据,也就无法输出了。

🧨🧨🧨上面的都加了还存在,必杀技,延迟方法:

//万能代码,不能用你回来找我,能用可以双击点赞评论666	
console.log('正在绘制')this.ctx.draw(false,(()=> {setTimeout(() => {uni.canvasToTempFilePath({x: 0,y: 0,width: this.canvasWidth1,height: this.canvasHeight1,destWidth: this.canvasWidth1,destHeight: this.canvasHeight1,canvasId: 'myCanvas',quality:0.6,success: res => {// 在H5平台下,tempFilePath 为 base64console.log(res,'绘制完成===',)//上传uni.uploadFile({url: url, //仅为示例,非真实的接口地址filePath:res.tempFilePath,header: {'token': self.$store.state.token,"version":"100.0.00"},name: 'file',formData: {},success: (uploadFileRes) => {console.log('uploadFileRes===1111',uploadFileRes)uni.hideLoading()},fail(err) {console.log(err)uni.hideLoading()}});//	this.pictureArr.push(res.tempFilePath);},fail(err) {console.log(err)uni.showToast({title:'上传图片失败!',icon:'none',duration: 3000})uni.hideLoading()}}, this)}, 3500)})());

🧨🧨🧨 万能代码,不能用你回来找我,能用可以双击点赞评论666


http://www.ppmy.cn/news/42675.html

相关文章

【程序员面试】最全指南,如何准备,如何投递,以及面试攻略大全分享!

今天我们继续来分享秋招 大家对怎么找到心仪的offer心里没底 于是我这一节来说说这一块 这一节的话主要有7个小点 第一个就是秋招为什么重要 第二个是应该去哪里找信息 第三个是你该怎么去投递信息 第四个是你应该做什么准备 第五个就是面试技巧 第六个就是资料大全第七个就是总…

【简陋Web应用3】实现人脸比对

文章目录&#x1f349; 前情提要&#x1f337; 效果演示&#x1f95d; 实现过程1. utils.py2. compare.html3. forms.py4. insightface_api.py5. app.py&#x1f345; 记录1. Bugs1.1 cv2.imshow()报错1.2 insightface人脸检测标注框错乱(&#x1f4a2;)2. 杂记&#x1f33e; 小…

处理用户输入

shell脚本编程系列 传递参数 向shell脚本传递数据的最简单方法是使用命令行参数 比如 ./add 10 30读取参数 bash shell会将所有的命令行参数都指派给位置参数的特殊变量。其中$0对应脚本名、$1是第一个参数、$2是第二个参数&#xff0c;依次类推&#xff0c;直到$9 #!/bin/b…

华为OD机试真题目录汇总 C++ 代码解答版

&#x1f680;前言 本文是华为OD机试真题(C)专栏的目录贴&#xff08;持续更新中…&#xff09; 专栏介绍&#xff1a;收集各个阶段的华为OD机试真题&#xff0c;每日更新&#xff0c; 最全、最新的华为OD实际机考的真题&#xff0c;本专栏将会使用C语言进行讲解&#xff0c;帮…

Redis -List

Redis List 本章介绍redis 的List的数据结构 Redis列表是字符串值的链表。Redis列表经常用于&#xff1a; 1、实现堆栈和队列 2、为后台工作系统提供队列管理 例如&#xff1a; 第一种情况&#xff0c;将List视为一种先进先出的队列 Treat a list like a queue (first in, fi…

运算符重载

概念&#xff1a;对已有运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型。 目录 一、加号运算符重载 分类&#xff1a; ①成员函数重载号 ②全局函数重载号 二、左移运算符重载 作用&#xff1a;以输出自定义数据类型 三、递增运算符重…

单片机作业第4章

1.SJMP rel 无条件跳转指令 rel是相对偏移量&#xff0c;是一个单字节的带符号8位二进制补码数&#xff0c;所以它能实现的程序跳转是双向的。 2. (单选题, 2分)当CPU响应外部中断0 (INT0)的中断请求后&#xff0c;程序计数器PC的内容是 &#xff08; A &#xff09; 。 A…

【Linux】进程间通信 --- 管道 共享内存 消息队列 信号量

等明年国庆去西藏洗涤灵魂&#xff0c;laozi不伺候这无聊的生活了 文章目录一、进程间通信1.什么是通信&#xff1f;&#xff08;IPC&#xff09;2.为什么要有通信&#xff1f;&#xff08;多进程协同&#xff09;3.如何进行通信&#xff1f;二、基于文件系统的管道通信1.通信的…