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 相关文章推荐
Prototype Object对象 学习
Jul 12 Javascript
jquery 多行滚动代码(附详细解释)
Jun 17 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
innerText和textContent对比及使用介绍
Feb 27 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
Aug 13 Javascript
asp.net刷新本页面的六种方法总结
Jan 07 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
Sep 08 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 Javascript
vue-cli安装使用流程步骤详解
Nov 08 Javascript
JavaScript使用闭包模仿块级作用域操作示例
Jan 21 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
建立文件交换功能的脚本(二)
2006/10/09 PHP
php解决安全问题的方法实例
2019/09/19 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
深入浅析Node.js单线程模型
2017/07/10 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
JS如何设置元素样式的方法示例
2017/08/28 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python中property函数用法实例分析
2018/06/04 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
国际贸易毕业生求职信
2014/07/20 职场文书
个人思想政治总结
2015/03/05 职场文书
思想工作总结范文
2015/08/12 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
JS数组去重详情
2021/11/07 Javascript