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 相关文章推荐
比较简单的一个符合web标准的JS调用flash方法
Nov 29 Javascript
javascript new后的constructor属性
Aug 05 Javascript
JavaScript实现更改网页背景与字体颜色的方法
Feb 02 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
js实现简单折叠、展开菜单的方法
Aug 28 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
TypeOf这些知识点你了解吗
Feb 21 Javascript
JS未跨域操作iframe里的DOM
Jun 01 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
vue实现单一筛选、删除筛选条件
Oct 26 Javascript
在js中修改html body的样式
Nov 11 Javascript
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
PHP4实际应用经验篇(1)
2006/10/09 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
一个网马的tips实现分析
2010/11/28 Javascript
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
Vue页面骨架屏注入方法
2018/05/13 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
python连接MySQL数据库实例分析
2015/05/12 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
24岁生日感言
2014/01/13 职场文书
《故乡》教学反思
2014/04/10 职场文书
实习评语大全
2014/04/26 职场文书
创先争优个人承诺书
2014/08/30 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
小学生优秀评语
2014/12/29 职场文书
欢迎词范文
2015/01/27 职场文书
医生个人年度总结
2015/02/28 职场文书
员工加薪申请报告
2015/05/15 职场文书
六一亲子活动感想
2015/08/07 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js