核心代码:
<script type="text/javascript">// Converts image to canvas; returns new canvas elementfunction convertImageToCanvas(image) {var canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;canvas.getContext("2d").drawImage(image, 0, 0);return canvas;}// Converts canvas to an imagefunction convertCanvasToImage(canvas) {var image = new Image();image.src = canvas.toDataURL("image/png");return image;}
</script>

需要注意:
跨域的图片需要设置crossOrigin="Anonymous"属性,然后等图片加载完成后才能使用 toDataURL() 方法否则会报错:Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.图片转canvas画布的时候(convertImageToCanvas)需要注意的是:如果图片原尺寸是200px*200px, 通过样式改变图片的宽高,则 image.width 和 image.height 获取的是改变后的宽高如果改变后的宽高小于原尺寸,那么将不能完整的把图片完整的绘制出来因为drawImage(image, 0, 0)是根据图片原尺寸进行绘制的

示例:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style type="text/css">/*img {width: 100px;}*/</style>
</head>
<body>
<!--<img id="tulip" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2256920272,2188849592&fm=26&gp=0.jpg" alt="" crossOrigin="Anonymous">--><img id="tulip" src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=158393800,2846304514&fm=26&gp=0.jpg" alt="" crossOrigin="Anonymous">
</body>
</html>
<script>// Converts image to canvas; returns new canvas elementfunction convertImageToCanvas(image) {var canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;canvas.getContext("2d").drawImage(image, 0, 0);return canvas;}// Converts canvas to an imagefunction convertCanvasToImage(canvas) {var image = new Image();image.src = canvas.toDataURL("image/png");return image;}function drawImage(img) {var cs = convertImageToCanvas(img);var image = convertCanvasToImage(cs);document.body.appendChild(image);}window.onload = function () {var img = document.getElementById("tulip");img.onload = drawImage(img);}
</script>

参考链接:

[link](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image)
[link](https://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror)
[link](https://www.jianshu.com/p/6fe06667b748)

转载于:https://www.cnblogs.com/WEB-PHP/p/10426164.html

原生JS 将canvas生成图片相关推荐

  1. java使用重绘实现拖动_原生JS使用Canvas实现拖拽式绘图功能

    一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包含圆心坐标点和半径)等实体 2.原生JavaScript实现,不依赖任何第三方j ...

  2. 原生js实现canvas气泡冒泡效果

    说明: 本文章主要分为ES5和ES6两个版本 ES5版本是早期版本,后面用ES6重写优化的,建议使用ES6版本. 1, 原生js实现canvas气泡冒泡效果的插件,api丰富,使用简单 2, 只需引入 ...

  3. 原生js实现canvas画布中绘制、移动、拖拽、删除矩形(如简易截图工具)

    功能描述 待图片上传并加载完成后,重新生成画布: 鼠标在画布区域内绘制,移动,拖拽,删除矩形(如截图工具一般): isboundary() 判断是否需要判断边界问题,默认false. 效果截图 实现代 ...

  4. html js 动画效果,原生js html5 canvas 3D云动画效果

    特效描述:原生js html5canvas 3D云动画效果.3D云效果,叼炸天!可用鼠标控制方向!本地要localhost才能正常演示 代码结构 1. 引入JS 2. HTML代码 varying v ...

  5. 原生JS结合canvas写的一套画板,能修改画笔粗细,能修改画笔颜色,能清空画板等一系列功能

    1. 本片文章是使用的原生JS代码编写的画板,能实现画笔粗细的修改,以及画笔颜色的修改 2. 用到的JS的canvas知识点之外,还用到了鼠标事件的监听.根据鼠标事件,监听点击起始位置,以及过程中鼠标 ...

  6. 前端学习(2879)歌谣学习篇原生js和canvas实现弹幕功能

    我是歌谣 放弃很难 坚持一定很酷 2021继续加油 目录结构 文件地址 源码地址后面可见 源码文件 index.css body { margin: 0; } .container { width: ...

  7. 原生JS实现Canvas时钟

    HTML中只有一个div包裹一个canvas元素,重点看JS部分. 重点: beginPath() 方法在一个画布中开始子路径的一个新的集合.  也就是说,运行到这个函数时,context中止当前的路 ...

  8. 原生js实现canvas粒子特效

    要实现的效果 当鼠标移入容器时,让鼠标作为中心点半径为80到圆内的粒子散开 当粒子不在圆的范围后,粒子返回原来的位置 主要代码 创建初始位置 // NUM_PARTICLES是粒子总个数for ( i ...

  9. 原生js通过canvas和cssRules实现图片分割与重组

    将一张照片分割成几段然后重新组合,按照常理来讲使用h5的canvas标签很容易就实现了,长话短说,直入正题: html : 首先创建一个img标签: <img id="img" ...

最新文章

  1. 如何弹出UIDatePicker最好
  2. python解压到指定文件夹_Python:将文件解压缩到当前工作目录,但不保存zip中的目录结构...
  3. 租房还是买房结婚?大数据告诉你年轻人的真实想法
  4. (四)系统虚拟化关键技术
  5. CRMEB v4二开文档
  6. html自动get,HTML Get
  7. 2 如何设置窗口title_如何设置华为4G路由2的WiFi黑白名单【设置方法】
  8. mysql 文件批量插入_mysql大批量插入数据的4种方法示例
  9. python背单词小程序_python背单词小程序
  10. 保存远程图片到本地 同时取得第一张图片并创建缩略图
  11. MATLAB中定积分的求解
  12. 【Android】使用deviceowner 配置手机设置 (Monkey自动化测试删去状态栏、设定输入法、静音、APP自动权限授予、Kiosk模式打开)
  13. Nacos+Gateway503错误,No servers available for service
  14. 解密android日志xlog,安卓开发技巧2:自定义日志工具类XLog的实现
  15. 利用移动硬盘+路由器搭建局域网云存储
  16. 【长按图片识别】uniapp vue开发时,点击图片识别—实现转发、收藏、识别图片二维码
  17. 傻白入门芯片设计,三大基本定律(十)
  18. 发送订阅消息 微信小程序
  19. 云服务案例分析 BB平台 Quiz4
  20. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

热门文章

  1. php将mysql转换为json字符串_在PHP中将MySQL记录集转换为JSON字符串
  2. 怎么用鼠标选中java中table的某一行_为什么同事的工作效率那么高?学会这些鼠标双击技巧,你也可以的...
  3. vue中使用vuex结合sessionStorage做的登录功能
  4. 50行代码实现的一个最简单的基于 DirectShow 的视频播放器
  5. flash作业_在线作业产品的基本构成与逻辑分解
  6. 安卓手机上跑_直接在电脑上浏览操作安卓手机 #效率App #scrcpy
  7. ueditor关闭元素
  8. Mybatis Mapper自动注入警告的解决方案
  9. vscode上传GitHub
  10. 牛客 2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛 签到题13题