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 相关文章推荐
在模板页面的js使用办法
Apr 01 Javascript
ExtJS4中使用mixins实现多继承示例
Dec 03 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
Three.js如何实现雾化效果示例代码
Sep 27 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
AngularJS中下拉框的高级用法示例
Oct 11 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
Jul 05 Javascript
详解js加减乘除精确计算
Mar 19 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
Jun 17 Javascript
swiper Scrollbar滚动条组件详解
Sep 08 Javascript
Vite + React从零开始搭建一个开源组件库
Jun 25 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
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php利用事务处理转账问题
2015/04/22 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
详解JS函数重载
2014/12/04 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
python动态性强类型用法实例
2015/05/09 Python
python aiohttp的使用详解
2019/06/20 Python
python实现大量图片重命名
2020/03/23 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
html特殊符号示例 html特殊字符编码对照表
2014/01/14 HTML / CSS
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
个人自我评价范文
2014/02/05 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
上班看电影检讨书
2014/02/12 职场文书
安全生产汇报材料
2014/02/17 职场文书
师德师风演讲稿
2014/05/05 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2014年副班长工作总结
2014/12/10 职场文书
公司人事任命通知
2015/04/20 职场文书
职工食堂管理制度
2015/08/06 职场文书
警用民用对讲机找不同
2022/02/18 无线电