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对单选框(radio)操作的小例子
Apr 25 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
Sep 16 Javascript
从零学JSON之JSON数据结构
May 19 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
基于jQuery实现收缩展开功能
Mar 18 Javascript
jQuery判断checkbox选中状态
May 12 Javascript
通俗解释JavaScript正则表达式快速记忆
Aug 23 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
微信小程序 冒泡事件原理解析
Sep 27 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 Javascript
openlayers4实现点动态扩散
Aug 17 Javascript
JavaScript parseInt0.0000005打印5原理解析
Jul 23 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
2013/07/05 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
Python可变参数函数用法实例
2015/07/07 Python
Python的re模块正则表达式操作
2016/05/25 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
python创造虚拟环境方法总结
2019/03/04 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
利用python汇总统计多张Excel
2020/09/22 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
机械制造专业个人的自我评价
2013/12/28 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
业绩考核岗位职责
2014/02/01 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python