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 相关文章推荐
jQuery操作CheckBox的方法介绍(选中,取消,取值)
Feb 04 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
JS实现给对象动态添加属性的方法
Jan 05 Javascript
jQuery实现搜索页面关键字的功能
Feb 16 Javascript
js模态对话框使用方法详解
Feb 16 Javascript
Bootstrap图片轮播效果详解
Oct 17 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
Aug 07 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
vue 实现小程序或商品秒杀倒计时
Apr 14 Javascript
vue 实现购物车总价计算
Nov 06 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
php-msf源码详解
2017/12/25 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
浅析Python中signal包的使用
2015/11/13 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python数据封装json格式数据
2018/03/04 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
装修活动策划方案
2014/08/27 职场文书
创业计划书之孕婴生活馆
2019/11/11 职场文书
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android