用canvas实现图片的剪裁、移动、缩放

用canvas实现图片的剪裁、移动、缩放

前言

由于前段时间需要做一个图片裁剪的小项目,具备的功能有移动,缩放、裁剪,由于计算复杂,网上也找过一些插件,但是多多少少都有些问题,与我自己项目的需要不一致,要么就是缩放移动的时候会有卡顿,闪烁的问题所以我就自己做了一个,但是因为其中思路转变的复杂我就不在这里描述直接教你们怎么用

//引入封装好的代码
import CutImage from "../utils/CutImage";
//使用
const bgCanvas = document.getElementById('bgCanvas');
const cutCanvas= document.getElementById('cutCanvas');
const w = bgCanvas .offsetWidth;
const h = bgCanvas .offsetHeight;
const cut =  new CutImage({
                bgCanvas:document.getElementById('bgCanvas'),
                cutCanvas:document.getElementById('cutCanvas),
                img:require('./assets/images/2.jpg'),
               cutShape:[
                    {x:w/2,y:0},
                    {x:w,y:h},
                    {x:0,y:h},
                ],//[arc,prismatic,rect]=[圆,棱形,矩形]
            })
  //cutShape:参数是裁剪宽的样式,接收一个坐标数组([x:0,y:0])或是一个字符串(arc、		  prismatic、rect)
  //调用toDataURL方法返回裁剪图片base64的数据
  cut.toDataURL();
  //调用destroy()方法会销毁改该示例对内存的占用
  cut.destroy();

效果示意图

在这里插入图片描述
在这里插入图片描述

demo代码地址

**https://github.com/Mengsui1/utils/blob/master/src/components/CutImg.vue
**

期望

因为我还算是个小白,如果代码中有什么bug或是更好的实现方式欢迎评论指出

需要注意

1:有些机型在获取图片后图片会发现90°旋转(比如微信获取图片大小超过一定限制后就会发生旋转,可以试试exif-js这个插件去处理),请先处理还这个问题后在将图片数据传递给img参数
2:ios在某一些系统版本下可能,图片加载直接会走onerror分支并抛出一个(clipboardData:undefind错误),具体解决方法可以参考一下这篇文章《移动端File和Base64的坑》(作者遇到的是ios v10.3我遇到的是ios v9.1.x)结局的思路是将base64转为Blob对象然后在调用URL.createObjectURL(Blob)就可以了

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值