vue下canvas裁剪图片实例讲解


Posted in Javascript onApril 16, 2020

由于时间关系 代码没有做整理大家有什么不懂得可以留言;

代码的主题思路备注中都有 大家可以看看

我的博客中还有关于canvas绘制矩形的文章有需要的可以看一下;

HTML代码:

第一行的canvas为裁剪后展示用;div中的canvas存放原有尺寸的图片

<canvas id="canvasImg1" style=" position: absolute; margin: 2px 0 0 0"></canvas>
<div id="dymImgCanv1" style=" display:none;">
<canvas id="dymCurrImg1" :src="leftImg.carImgUrl" width="1920" height="1080"></canvas>
</div>

JS截取图片方法

1裁剪方法传参

oMark2['canvas1'] = 'canvasImg2'; // 展示结果canvas id
oMark2['canvas2'] = 'dymCurrImg2'; //画布原始图片canvas id
oMark2['ImgUrl'] = carImgUrl;
oMark2['offsetLeft'] = location[0];
oMark2['offsetTop'] = location[2];
oMark2['offsetWidth'] = location[1] - location[0];
oMark2['offsetHeight'] = location[3] - location[2];

2裁剪方法 (注意:下边方法中关于构建的画布 canvas1,canvas3与两个canvas标签ID的命名是不对应的,方便大家理解我把关系捋出来

canvas1 = oMark['canvas2'] = 'dymCurrImg2'

canvas3 = oMark['canvas1'] = 'canvasImg2'

TailoringImg(oMark) {
    // 设置三个canvas 分别为 canvas1 ,canvas2,canvas3
    //  每个canvas的作用 canvas1原始图片画布(页面中隐藏);
    //  canvas2原图和裁剪结果之间转换;
    //  canvas3裁剪之后的结果展示(页面中展示);
    let res2 = oMark['ImgUrl'];
    let that = this;
    return new Promise(function (resolve, reject) {
     //图片剪切处理
     var canvas1 = document.getElementById(oMark['canvas2']);
     var canvas3 = document.getElementById(oMark['canvas1']);
     canvas1.height = 1080;
     canvas1.width = 1920;

     canvas3.height = 198;
     canvas3.width = 400;
     var cxt1 = canvas1.getContext("2d"); // getContext() 方法返回一个用于在画布上绘图的环境
     var img = new Image();
     img.crossOrigin = '';
     img.src = res2;
     var canvas2 = document.createElement("canvas"); // 创建虚拟画布环境
     var cxt2 = canvas2.getContext("2d");

     img.onload = function () {
      // 计算图片缩放比例
      var Rwidth = canvas1.width / img.width;
      var Rheight = canvas1.height / img.height;

      cxt1.drawImage(img, 0, 0, canvas1.width, canvas1.height); // --第一步-- 原图绘制在画布上 drawImage方法在画布上绘制图像、画布或视频。也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。



// 计算缩放好后的尺寸
      var srcX = oMark.offsetLeft * Rwidth;
      var srcY = oMark.offsetTop * Rheight;
      var sWidth = oMark.offsetWidth * Rwidth;
      var sHeight = oMark.offsetHeight * Rheight;
      var dataImg = cxt1.getImageData(srcX, srcY, sWidth, sHeight); // --第二步-- getImageData() 复制原图画布上指定矩形的像素数据

      canvas2.width = sWidth;
      canvas2.height = sHeight;
      cxt2.putImageData(dataImg, 0, 0, 0, 0, canvas2.width, canvas2.height); // --第三步-- 通过 putImageData() 将原图图像数据放到canvas2画布中
      var img2 = canvas2.toDataURL("image/png"); // --第四步-- toDataURL()将canvas2画布保存为图像

      var cxt3 = canvas3.getContext("2d"); // getContext() 方法返回一个用于在画布上绘图的环境
      var img3 = new Image(); // 创建图像对象
      img3.crossOrigin = ''; // 图像跨域设置
      img3.src = img2;    // 设置图像地址
      img3.onload = function () { // onload内可以获取图像信息
       cxt3.drawImage(img3, 0, 0, canvas3.width, canvas3.height) // --第五步-- 将canvas2画布生成的图像放在canvas3画布中

      };
      resolve();
     }
    })
   },

到此这篇关于vue下canvas裁剪图片实例讲解的文章就介绍到这了,更多相关vue下canvas裁剪图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript实现的动态添加表单元素input,button等(appendChild)
Nov 24 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
javascript+html5实现仿flash滚动播放图片的方法
Apr 27 Javascript
AngularJS进行性能调优的7个建议
Dec 28 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
May 11 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
浅谈Node 异步IO和事件循环
May 05 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 Javascript
vuex页面刷新导致数据丢失的解决方案
Dec 10 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 #Javascript
js String.prototype.trim字符去前后空格的扩展
Aug 23 #Javascript
Vue Object 的变化侦测实现代码
Apr 15 #Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 #Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
Apr 15 #Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
Apr 15 #Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
Apr 15 #Javascript
You might like
用PHP调用数据库的存贮过程!
2006/10/09 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
php学习 函数 课件
2008/06/15 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
PHP分页类集锦
2014/11/18 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
基于php实现的验证码小程序
2016/12/13 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
XML的代替者----JSON
2007/07/21 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
python两种遍历字典(dict)的方法比较
2014/05/29 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
python中元组的用法整理
2020/06/15 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
几个SQL的面试题
2014/03/08 面试题
银行柜员应聘推荐信范文
2013/11/24 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
高三政治教学反思
2014/02/06 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
银行求职自荐信范文
2015/03/04 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python