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 相关文章推荐
jQuery滚动加载图片效果的实现
Mar 06 Javascript
js 输出内容到新窗口具体实现代码
May 31 Javascript
得到form下的所有的input的js代码
Nov 07 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
JavaScript中的Math.E属性使用详解
Jun 12 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
Dec 25 Javascript
浅谈Webpack打包优化技巧
Jun 12 Javascript
Web安全之XSS攻击与防御小结
Dec 13 Javascript
微信小程序实现canvas分享朋友圈海报
Jun 21 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 获取可变函数参数的函数
2009/08/26 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
公路绿化方案
2014/05/12 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
红旗渠导游词
2015/02/09 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android