canvas实现图像截取功能


Posted in Javascript onFebruary 06, 2017

本文实例为大家分享了canvas图像截取的具体代码,供大家参考,具体内容如下

<!DOCTYPE html> 
<html> 
<head lang="en"> 
  <meta charset="UTF-8"> 
  <title>canvas-图像截取</title> 
  <style> 
    canvas{ 
      border: 1px dashed red; 
      float: left; 
      position: relative; 
 
    } 
  </style> 
  </head> 
<body> 
  <div id="cantox" style="position: relative"> 
    <canvas id="oldcanvas" width="500px" height="300px"> 
    </canvas> 
    <div id="cliptox" style="position: absolute;display:none"></div> 
  </div> 
  <button id ="btnclip" style="float: left">截取该区域</button> 
  <canvas id="nowcanvas" width="500px" height="300px" > 
  </canvas> 
 
  <script> 
    //获取div元素 
    var cantox = document.getElementById("cantox"); 
    var cliptox = document.getElementById("cliptox"); 
    var btnclip = document.getElementById("btnclip"); 
    //获取到canvas元素 
    var oldcanvas = document.getElementById("oldcanvas"); 
    var nowcanvas = document.getElementById("nowcanvas"); 
    //获取canvas中的画图环境 
    var oldcontext = oldcanvas.getContext('2d'); 
    var nowcontext = nowcanvas.getContext('2d'); 
 
    var img = new Image(); 
    img.src = "./image/liuyifei.jpg"; 
 
    //加载图像到canvas画布中 
    window.onload = function (){ 
      oldcontext.drawImage(img,0,0,oldcanvas.width,oldcanvas.height); 
    } 
    var startPoint;//截取图像开始坐标 
    var endPoint;//截图图像的结束坐标 
    var w; //截取图像的宽度 
    var h; //截取图像的高度 
    var flag = false; //用于判断移动事件事物控制 
    //鼠标按下事件 
    cantox.onmousedown = function (e){ 
      flag = true; 
      cliptox.style.display = 'block'; 
      startPoint = windowToCanvas(oldcanvas, e.clientX, e.clientY); 
      cliptox.style.left = startPoint.x+'px'; 
      cliptox.style.top = startPoint.y+'px'; 
    } 
 
    //鼠标移动事件 
    cantox.onmousemove = function (e){ 
      if(flag){ 
        cliptox.style.background = 'rgba(0,0,0,0.5)'; 
        endPoint = windowToCanvas(oldcanvas, e.clientX, e.clientY); 
        w = endPoint.x - startPoint.x; 
        h = endPoint.y - startPoint.y; 
        cliptox.style.width = w +'px'; 
        cliptox.style.height = h+'px'; 
      } 
    } 
    //鼠标释放事件 
    cantox.onmouseup = function (e){ 
      flag = false; 
    } 
 
    //按钮截取事件 
    btnclip.onclick = function (){ 
      imgCut(nowcontext,img,oldcanvas.width,oldcanvas.height,startPoint.x,startPoint.y,w,h); 
    } 
 
    /* 
    * 图像截取函数 
    * context:绘制环境对象 
    * image:图像对象 
    * imgElementW:图像显示的宽度 
    * imgElementH:图像显示的高度 
    * sx:截取图像的开始X坐标 
    * sy:截取图像的开始Y坐标 
    * w:截取图像的宽度 
    * h:截取图像的高度 
    * */ 
    function imgCut(context,image,imgElementW,imgElementH,sx,sy,w,h){ 
      //清理画布,便于重新绘制 
      context.clearRect(0,0,imgElementW,imgElementH); 
      //计算 :比例 = 原图像/显示图像 
      var ratioW = image.width/imgElementW; 
      var ratioH = image.height/imgElementH; 
      //根据截取图像的所占位置及大小计算出在原图所占的位置及大小 
      //.drawImage(图像对象,原图像截取的起始X坐标,原图像截取的起始Y坐标,原图像截取的宽度,原图像截取的高度, 
      // 绘制图像的起始X坐标,绘制图像的起始Y坐标,绘制图像所需要的宽度,绘制图像所需要的高度); 
      context.drawImage(image,ratioW*sx,ratioH*sy,ratioW*w,ratioH*h,0,0,w,h); 
    } 
 
    /* 
     * 坐标转换:将window中的坐标转换到元素盒子中的坐标,并返回(x,y)坐标 
     * element:canvas元素对象 
     * x:鼠标在当前窗口X坐标值 
     * y:鼠标在当前窗口Y坐标值 
     * */ 
    function windowToCanvas(element,x,y){ 
      //获取当前鼠标在window中的坐标值 
      // alert(event.clientX+"-------"+event.clientY); 
      //获取元素的坐标属性 
      var box = element.getBoundingClientRect(); 
      var bx = x - box.left; 
      var by = y - box.top; 
      return {x:bx,y:by}; 
    } 
  </script> 
</body> 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js window.event对象详尽解析
Feb 17 Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 Javascript
javascript 动态调整图片尺寸实现代码
Dec 28 Javascript
javascript字符串拼接的效率问题
Dec 25 Javascript
JS获取DropDownList的value值与text值的示例代码
Jan 07 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
基于JS实现EOS隐藏错误提示层代码
Apr 25 Javascript
JavaScript基础教程——入门必看篇
May 20 Javascript
vue+springmvc导出excel数据的实现代码
Jun 27 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
vue使用自定义指令实现拖拽
Jan 29 Javascript
JS跨域请求外部服务器的资源
Feb 06 #Javascript
canvas实现动态小球重叠效果
Feb 06 #Javascript
canvas滤镜效果实现代码
Feb 06 #Javascript
canvas实现图像放大镜
Feb 06 #Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 #Javascript
localStorage的黑科技-js和css缓存机制
Feb 06 #Javascript
jQuery快速实现商品数量加减的方法
Feb 06 #Javascript
You might like
PHP 日,周,月点击排行统计
2012/01/11 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
Ionic快速安装教程
2016/06/03 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python I/O与进程的详细讲解
2019/03/08 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
毕业生找工作的求职信范文
2013/12/24 职场文书
分公司经理任命书
2014/06/05 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
《月光曲》教学反思
2016/02/16 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
vue中 this.$set的使用详解
2021/11/17 Vue.js
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server