Vue + ccropper.js裁切图片(vue-cropper)

有什么问题可以加我的微信,有问必答。

 

致力于技术分享

 

按原比例裁切图片,不失真

安装:

 

    cnpm install vue-cropper

使用:

 

 

import VueCropper from 'vue-cropper'
  <div class="cropper-content">
    <div class="cropper">
      <vueCropper
        ref="cropper"
        :img="option.img"
        :outputSize="option.size"
        :outputType="option.outputType"
        :info="true"
        :full="option.full"
        :canMove="option.canMove"
        :canMoveBox="option.canMoveBox"
        :original="option.original"
        :autoCrop="option.autoCrop"
        :autoCropWidth="option.autoCropWidth"
        :autoCropHeight="option.autoCropHeight"
        :fixedBox="option.fixedBox"
        @realTime="realTime"
        @imgLoad="imgLoad"
      ></vueCropper>
    </div>
    <div class="show-preview" :style="{'width': previews.w + 'px', 'height': previews.h + 'px',  'overflow': 'hidden', 'margin': '5px'}">
      <div :style="previews.div" class="preview">
        <img :src="previews.url" :style="previews.img">
      </div>
    </div>
  </div>

  <div class="footer-btn">
    <div class="scope-btn">
      <label class="btn" for="uploads">更换图片</label>
      <input type="file" id="uploads" style="position:absolute; clip:rect(0 0 0 0);" accept="image/png, image/jpeg, image/gif, image/jpg" @change="uploadImg($event, 1)">

      <button  @click="changeScale(1)">+</button>
      <button  @click="changeScale(-1)">-</button>
      <button  @click="rotateLeft">↺</button>
      <button  @click="rotateRight">↻</button>
    </div>
    <div class="upload-btn">
      <button  @click="down('blob')">下载</button>
    </div>
  </div>
 
export default {
    data() {
      return {
        crap: false,
        previews: {},
        option: {
          img: 'http://img1.vued.vanthink.cn/vued751d13a9cb5376b89cb6719e86f591f3.png',
          size: 1,
          full: false,//输出原图比例截图 props名full
        outputType: 'png',
canMove : true, original : false, canMoveBox : true, autoCrop : true, autoCropWidth : 200 , autoCropHeight : 200 , fixedBox : true } , downImg : '#' , } ; } , methods : { changeScale (num ) { num = num || 1 this.$refs .cropper . changeScale (num ) } , rotateLeft () { this.$refs .cropper . rotateLeft () } , rotateRight () { this.$refs .cropper . rotateRight () } , finish (type ) { // 输出 // var test = window.open('about:blank') // test.document.body.innerHTML = '图片生成中..' if (type === 'blob' ) { this.$refs .cropper .getCropBlob ((data ) => { var img = window .URL . createObjectURL (data ) this.model = true this.modelSrc = img }) } else { this.$refs .cropper .getCropData ((data ) => { this.model = true this.modelSrc = data }) } } , // 实时预览函数 realTime (data ) { this.previews = data } , down (type ) { // event.preventDefault() var aLink = document . createElement ( 'a' ) aLink .download = 'author-img' // 输出 if (type === 'blob' ) { this.$refs .cropper .getCropBlob ((data ) => { console . log (data ) this.downImg = window .URL . createObjectURL (data ) // aLink.download = this.downImg; console . log ( this.downImg ) aLink .href = window .URL . createObjectURL (data ) aLink . click () }) } else { this.$refs .cropper .getCropData ((data ) => { this.downImg = data aLink .href = data aLink . click () }) } } , uploadImg (e , num ) { //上传图片 // this.option.img var file = e .target .files [ 0 ] if ( ! /\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/ . test (e .target .value )) { alert ( '图片类型必须是.gif,jpeg,jpg,png,bmp中的一种' ) return false } var reader = new FileReader () reader .onload = (e ) => { let data if ( typeof e .target .result === 'object' ) { // 把Array Buffer转化为blob 如果是base64不需要 data = window .URL . createObjectURL ( new Blob ([e .target .result ])) } else { data = e .target .result } if (num === 1 ) { this.option .img = data } else if (num === 2 ) { this.example2 .img = data } } // 转化为base64 // reader.readAsDataURL(file) // 转化为blob reader . readAsArrayBuffer ( file ) } , imgLoad (msg ) { console . log (msg ) } } , components : { VueCropper } , }

 

 

.cropper-content{
  display: flex;
  display: -webkit-flex;
  justify-content: flex-end;
  -webkit-justify-content: flex-end;
  .cropper{
    width: 350px;
    height: 300px;
  }
  .show-preview{
    flex: 1;
    -webkit-flex: 1;
    display: flex;
    display: -webkit-flex;
    justify-content: center;
    -webkit-justify-content: center;
    .preview{
      overflow: hidden;
      border-radius: 50%;
      border:1px solid #cccccc;
      background: #cccccc;
      margin-left: 40px;
    }
  }
}
.footer-btn{
  margin-top: 30px;
  display: flex;
  display: -webkit-flex;
  justify-content: flex-end;
  -webkit-justify-content: flex-end;
  .scope-btn{
    width: 350px;
    display: flex;
    display: -webkit-flex;
    justify-content: space-between;
    -webkit-justify-content: space-between;
  }
  .upload-btn{
    flex: 1;
    -webkit-flex: 1;
    display: flex;
    display: -webkit-flex;
    justify-content: center;
    -webkit-justify-content: center;
  }
  .btn {
    outline: none;
    display: inline-block;
    line-height: 1;
    white-space: nowrap;
    cursor: pointer;
    -webkit-appearance: none;
    text-align: center;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    outline: 0;
    margin: 0;
    -webkit-transition: .1s;
    transition: .1s;
    font-weight: 500;
    padding: 8px 15px;
    font-size: 12px;
    border-radius: 3px;
    color: #fff;
    background-color: #67c23a;
    border-color: #67c23a;
  }
}

截图效果:

 

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 45
    评论
Vue.js 是一个流行的前端框架,而 Three.js 是一个用于创建 3D 图形的 JavaScript 库。将两者结合起来可以创建出令人惊叹的 3D 应用程序。下面是 vue+three.js 的每步解析: 1. 创建 Vue.js 应用程序 首先,需要创建一个 Vue.js 应用程序。可以使用 Vue CLI 来生成一个新的项目或手动创建一个新的 Vue.js 应用程序。 2. 安装 Three.js 可以使用 npm 包管理器安装 Three.js,也可以直接下载 Three.js 库文件并将其添加到项目中。 3. 在 Vue 组件中引入 Three.jsVue.js 中使用 Three.js 需要将其导入到组件中。可以使用 ES6 的 import 语句来引入 Three.js。 4. 创建场景、相机和渲染器 在 Three.js 中创建 3D 场景需要场景、相机和渲染器。可以在 Vue.js 组件的 mounted 钩子函数中创建它们。 5. 创建 3D 对象 可以使用 Three.js 来创建各种类型的 3D 对象,如立方体、球体、平面等。可以在 Vue.js 组件的 mounted 钩子函数中创建它们。 6. 将 3D 对象添加到场景中 创建 3D 对象后,需要将它们添加到场景中。可以使用场景对象的 add 方法来添加它们。 7. 渲染场景 最后,在 Vue.js 组件的 mounted 钩子函数中使用渲染器对象来渲染场景。 这是一个基本的 vue+three.js 应用程序的步骤。当然,还有很多其他的细节需要注意,如处理用户交互、加载 3D 模型等。但是,掌握了这些基本步骤,就可以开始创建自己的 3D 应用程序了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值