canvas.toDataURL生成图片报错的解决方案
问题原因:
toDataURL方法存在跨域限制,如果执行时dom内含有跨域的图片则浏览器执行时会报错。
这个根据不同的系统有不同的表现,例如:生成完毕但控制台有warning类型的警告,或者直接异常报error。
解决思路:
解决图片的跨域问题需要前后的配合进行,测试进行时发现服务端是支持CORS跨域的,因此在前端设置下img的CORS属性即可,如果设置后不生效的话需要考虑下是不是由于请求资源都会在CDN服务器中缓存,所以设置后会存在不生效的情况。此情况在图片地址后追加时间戳,绕过CDN直接请求服务器即可。由于项目开发情况复杂,在头部进行统一设置,就不用考虑插件差异的情况了;
解决方案:
资源服务器给图片设置cors请求头允许跨域请求,前端设置图片的crossOrigin属性为anonymous来允许跨域,并且在图片后缀添加时间戳,防止请求CDN缓存资源;
完整示例代码如下:
<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.0/jquery.min.js"></script><script>$(document).ready(function () {var imgs = $('img');for (var i = 0; i < imgs.length; i++) {imgs[i].crossOrigin = "Anonymous"imgs[i].src = imgs[i].src + '?' + (+new Date());}})</script>
</head><body>原图(注意观察图片追加的时间戳与属性):<img id="test" src="自行替换" alt=""><hr>生成:
</body><script>function convertImageToCanvas(image) {var canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;canvas.getContext("2d").drawImage(image, 0, 0);return canvas;}function convertCanvasToImage(canvas) {var image = new Image();image.src = canvas.toDataURL("image/png");return image;}function draw(img) {var cs = convertImageToCanvas(img);var image = convertCanvasToImage(cs);document.body.appendChild(image);}window.onload = function () {var img = document.getElementById("test");img.onload = draw(img);}
</script>
</html>相关文章:
canvas.toDataURL生成图片报错的解决方案
问题原因: toDataURL方法存在跨域限制,如果执行时dom内含有跨域的图片则浏览器执行时会报错。 这个根据不同的系统有不同的表现,例如:生成完毕但控制台有warning类型的警告,或者直接异常报error。 解决思路ÿ…...
电容笔和Apple pencil的区别是什么?好用电容笔推荐
Apple Pencil与目前市场上常见的电容笔最大的不同之处在于,普通电容笔并不具备苹果Pencil特有的重力压感,而仅仅是一种倾斜的压感。不过,其在其它方面的表现也很出色,与Apple Pencil相似,而且价格仅为200元。现在&…...
关于onnx 转ncnn 的问题
文章目录修改模型Detect层设计转换后处理优质文章由于有些操作是没法支持的 如5维的操作: Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes !参考&#…...
设计模式之《责任链模式》
------《责任链模式》责任链模式的概念为什么用责任链模式工作中用在哪里设计思路代码实现总结责任链模式的概念 责任链模式是一种行为型设计模式,它允许你将请求沿着处理链传递,直到有一个处理者能够处理该请求为止。 在责任链模式中,每个…...
Android Studio实现多功能日记本
项目目录一、项目概述二、系统特点三、开发环境四、详细设计1、E-R图2、数据库3、系统设置五、运行演示一、项目概述 本次实现了功能实用且齐全的日记本,界面友好,使用便捷,采用MVC架构设计。使用SQLite数据库存储数据,数据表有主…...
只依赖Tensorrt和opencv的yolov5源代码
simple_yolo.hpp #ifndef SIMPLE_YOLO_HPP #define SIMPLE_YOLO_HPP/*简单的yolo接口,容易集成但是高性能 */#include <vector> #include <memory> #include <string> #include <future> #include <opencv2/opencv.hpp>namespace Si…...
多路I/O转接 poll(了解)
poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。 p…...
听说你也在为配置tomcat server而烦恼,看我这一篇,让你醍醐灌顶!
一.通过maven创建项目 二.下载tomcat服务器 我们一般在tomcat官网中进行tomcat的下载 Apache Tomcat - Welcome! 三.添加配置:我们点击下图中的文件配置 四.测试配置的tomcat 我们在文件的body中输入 测试内容: 在控制台中显式tomcat运行的信息&#…...
【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴
大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题,现在我们就来解决这样的问题,方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”,然后打开“设置”; 也可以在VirtualBox界面打开“设…...
全球自动驾驶竞争力最新排行榜,4家中国企业上榜
发展至今,自动驾驶技术不仅是汽车行业的一个主战场,更是全球科技领域中备受关注和充满竞争的一个重要领域。近年来,各大汽车制造商和科技公司都在投入大量财力物力人力进行自动驾驶技术的研发,并进一步争夺市场份额。 当然&#…...
APP启动流程分析
1、要分析的问题 1、与正常trace比对,确认过耗时在哪个步骤(am create/pause/stop/start/doframe)? 2、与正常trace比对,确认过耗时在哪个cpu state(Running/Runnable/Sleep/Uninterruptible Sleep)? 2、启动分析 …...
IIR数字滤波器简介与实现
一、简介: IIR是一种数字滤波器,其输出是输入信号和过去输出的某些加权和。IIR滤波器由反馈和前馈组成,可以用于滤除或增强信号的特定频率成分。 IIR滤波器的输出表示为: y[n] b0 * x[n] b1 * x[n-1] b2 * x[n-2] … - a1 * …...
3.5 函数的极值与最大值和最小值
学习目标: 我要学习函数的极值、最大值和最小值,我会采取以下几个步骤: 理解基本概念:首先,我会理解函数的极值、最大值和最小值的概念。例如,我会学习函数在特定区间内的最高点和最低点,并且理…...
第五十八天打卡
第五十八天打卡 739. 每日温度 提示 中等 1.5K company 亚马逊 company Facebook company 字节跳动 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在…...
双一流大学计算机专业月薪拿2000?网友:我裂开
**“计算机不行了”“求求不要再学计算机”……**这样的言论时不时就会在网上掀起一番热议,知了姐看得不少。尤其最近有则新闻,更是给计算机专业盖上“不值钱”的帽子。 某985、211大学校招会上,有企业招聘计算机相关岗位时,提出…...
ChatGPT的“N宗罪”?|AI百态(上篇)
序: AI诞生伊始,那是人人欣喜若狂的科技曙光,深埋于哲学、想象和虚构中的古老的梦,终于成真,一个个肉眼可见的智能机器人,在复刻、模仿和服务着他们的造物主——人类。 但科技树的点亮,总会遇到…...
48.现有移动端开源框架及其特点—MDL(mobile-deep-learning)
48.1 功能特点 一键部署,脚本参数就可以切换ios或者android支持iOS gpu运行MobileNet、squeezenet模型已经测试过可以稳定运行MobileNet、GoogLeNet v1、squeezenet、ResNet-50模型体积极小,无任何第三方依赖。纯手工打造。提供量化函数,对32位float转8位uint直接支持,模型…...
4.9--计算机网络之TCP篇之TCP Keepalive 和 HTTP Keep-Alive --(复习+大总结)---沉淀ing
HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接; TCP 的 Keepalive,是由 TCP 层(内核态) 实现的,称为 TCP 保活机制 HTTP 的 Keep-Alive HTTP 是基于…...
qt完善登录界面(2023-4-6)
点击登录按钮后,判断账号和密码是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容…...
104.(cesium篇)cesium卫星轨道模拟
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <...
ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)
ArcMap新手实战:5分钟高效提取面要素四至信息与字段优化技巧 刚接触ArcMap的GIS实习生或规划人员,常常需要快速处理行政区划数据并生成规范的四至报告。面对属性表中密密麻麻的英文字段名和冗余数据,如何高效完成从数据加载到结果美化的全流程…...
AgiBot World数据集实战:如何用百万级轨迹训练你的机器人策略(附避坑指南)
AgiBot World数据集实战:百万级轨迹训练机器人策略的完整指南 1. 数据集的革命性价值 在机器人学习领域,数据质量与规模直接决定了策略模型的性能上限。AgiBot World作为当前最大的开源机器人操作数据集,其核心突破在于: 规模突…...
Notion-Enhancer模块注册表:扩展发现、加载和管理的完整机制
Notion-Enhancer模块注册表:扩展发现、加载和管理的完整机制 【免费下载链接】notion-enhancer an enhancer/customiser for the all-in-one productivity workspace notion.so 项目地址: https://gitcode.com/gh_mirrors/no/notion-enhancer Notion-Enhance…...
3大核心技术构建ESP32智能语音交互系统:从离线唤醒到物联网控制的完整实现方案
3大核心技术构建ESP32智能语音交互系统:从离线唤醒到物联网控制的完整实现方案 【免费下载链接】xiaozhi-esp32 Build your own AI friend 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 在物联网和智能硬件快速发展的今天,如…...
告别模拟信号烦恼:手把手教你用51单片机驱动DAC0832输出正弦波(附Proteus仿真)
51单片机实战:用DAC0832打造完美正弦波发生器 在电子设计领域,能够精确生成模拟信号是一项基础却至关重要的技能。想象一下,当你亲手搭建的电路在示波器上显示出光滑的正弦波形时,那种成就感是无与伦比的。本文将带你从零开始&…...
解决设计开发断层:Figma Code Connect的7个革新性实践
解决设计开发断层:Figma Code Connect的7个革新性实践 【免费下载链接】code-connect A tool for connecting your design system components in code with your design system in Figma 项目地址: https://gitcode.com/GitHub_Trending/co/code-connect 设计…...
STM32F103C6 USB DFU升级实战:从CubeMX配置到DfuSeDemo烧录,一步步教你搞定Bootloader设计
STM32F103C6 USB DFU升级全流程解析:从硬件配置到安全跳转的深度实践 在嵌入式开发中,固件升级是产品生命周期中不可或缺的环节。想象一下这样的场景:你的设备已经部署在客户现场,突然发现一个需要紧急修复的BUG,或者需…...
AI手势识别从入门到应用:彩虹骨骼版MediaPipe Hands全流程解析
AI手势识别从入门到应用:彩虹骨骼版MediaPipe Hands全流程解析 1. 手势识别技术概述 手势识别作为人机交互的重要分支,正在改变我们与数字世界的互动方式。想象一下,无需触碰任何设备,仅凭手势就能控制音乐播放、浏览照片或操作…...
如何用WeChatMsg实现微信聊天记录的永久保存与深度分析
如何用WeChatMsg实现微信聊天记录的永久保存与深度分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …...
关于我使用MinMix创建了一个Tailwindcss学习网站
一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全…...
