vue+canvas图片裁切
头像的裁切、图片的一些处理……

vue:路由router、vuex状态管理
组件效果

组件代码:

实现思路
盒子即一张画布,把选择的图片放到画布中进行裁切,按照canvas的一些语法裁切一部分内容。
有一个固定大小的画布,和一个固定大小的mark。图片拖进来有自己的位置,也有当前选中图片的位置和大小,新创建一张图片存着,canvas绘制的模板,而且画布的大小和位置、mark的大小和位置、图片的大小和位置都必须是固定的,我才能算出我要裁取出来这部分的坐标,
上传图片:把图片绘制到画布中(宽最大为画布宽度,高自动;高最大为画布高度,宽自动)
拖拽:位置改变了,需要重新在画布中绘制图片。touch事件,需要重新绘制图片所在位置

rem:响应式布局开发

布局代码:


准备数据,数据去渲染视图;
ref:非受控组件。受数据影响的组件叫受控组件,不受的就直接操作dom。
canvas的宽高一定要用width height属性来设定
选择文件后把img绘制在canvas画布上
拖拽:其实是改变ctx.drawImage()的参数
裁切:获取指定区域的像素getImageData -> putImageData


组件化开发:
- 指定画布大小 mark大小,可以通过传递不同属性来实现
 - 裁切完后暴露出URL:用自定义事件
 

  
    
    
      class="mark"
      :style="{left:`${markLeft}px`,top:`${markLeft}px`,width:`${markWidth}px`,height:`${markWidth}px`}"
      v-show="showMark">
    
    
      
      选择图片
      放大
      缩小
      保存图片
    
  
.clip-img{
  // 不要用样式,样式的宽高不是真实的宽高
  //canvas{
  //  width: 300px;
  //  height: 300px;
  //}
  padding: 0.2rem;
  .canvas-container{
    position: relative;
    .mark{
      position: absolute;
      background: rgba(0,0,0,0.6);
    }
  }
  .button-list{
    .file{
      display: none;
    }
  }
}
 
   
   
   
   
   
   
 


















