原生JS 将canvas生成图片
2024-09-29 20:59:20
核心代码:
<script type="text/javascript">
// Converts image to canvas; returns new canvas element
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;
}
// Converts canvas to an image
function 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 element
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;
} // Converts canvas to an image
function 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)
最新文章
- jQueryMobile引入文件后样式无法正常显示
- noip2016复习
- 移动互联网实战--wifi定位和架构
- Spring-Boot初始篇
- UVaLive 7269 Snake Carpet (找规律,模拟)
- Java数据结构与算法(3) - ch04栈(栈和转置)
- Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要
- c# new关键字的三种用法
- Eclipse 安装最新SVN插件
- Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac
- unix文件系统中的硬链接和软连接
- webpack配置使用gif动图
- 网络通信协议tcp,udp区别
- 第一章入门篇CSS样式的分类、盒模型
- oracle 11g完全安装教程(CentOS)
- Invoking ";cmake"; failed报错处理
- [转]redis配置文件redis.conf的详细说明
- noip2007部分题
- WhatsApp &; Tasker for Android – Read &; Write messages
- WebHttpBinding.ReaderQuotas 无法设置或者无法点出来
热门文章
- 再springMVC中自定义文件上传处理解决与原spring中MultipartResolve冲突问题
- C语言——<;算法>;_冒泡算法的使用及理解
- c#与IronPython Clojure-clr的调用
- 解决vuejs应用在nginx非根目录下部署时访问404的问题
- [javaSE] 数组(获取最值)
- java并发编程的艺术(一)---锁的基本属性
- 虚拟机VMware workstations的网络设置
- 您可能不知道的CSS元素隐藏“失效”以其妙用——张鑫旭
- CSS 属性-webkit-tap-highlight-color的理解
- elixir mac环境