核心代码:
<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>

参考链接:

最新文章

  1. jQueryMobile引入文件后样式无法正常显示
  2. noip2016复习
  3. 移动互联网实战--wifi定位和架构
  4. Spring-Boot初始篇
  5. UVaLive 7269 Snake Carpet (找规律,模拟)
  6. Java数据结构与算法(3) - ch04栈(栈和转置)
  7. Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要
  8. c# new关键字的三种用法
  9. Eclipse 安装最新SVN插件
  10. Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac
  11. unix文件系统中的硬链接和软连接
  12. webpack配置使用gif动图
  13. 网络通信协议tcp,udp区别
  14. 第一章入门篇CSS样式的分类、盒模型
  15. oracle 11g完全安装教程(CentOS)
  16. Invoking &quot;cmake&quot; failed报错处理
  17. [转]redis配置文件redis.conf的详细说明
  18. noip2007部分题
  19. WhatsApp &amp; Tasker for Android – Read &amp; Write messages
  20. WebHttpBinding.ReaderQuotas 无法设置或者无法点出来

热门文章

  1. 再springMVC中自定义文件上传处理解决与原spring中MultipartResolve冲突问题
  2. C语言——&lt;算法&gt;_冒泡算法的使用及理解
  3. c#与IronPython Clojure-clr的调用
  4. 解决vuejs应用在nginx非根目录下部署时访问404的问题
  5. [javaSE] 数组(获取最值)
  6. java并发编程的艺术(一)---锁的基本属性
  7. 虚拟机VMware workstations的网络设置
  8. 您可能不知道的CSS元素隐藏“失效”以其妙用——张鑫旭
  9. CSS 属性-webkit-tap-highlight-color的理解
  10. elixir mac环境