当前位置:编程学习 > > 正文

vue表单上传图片数据(vue-cropper插件实现图片截取上传组件封装)

时间:2022-03-28 01:04:27类别:编程学习

vue表单上传图片数据

vue-cropper插件实现图片截取上传组件封装

基于vue-cropper插件实现图片截取上传组件封装的具体代码,供大家参考,具体内容如下

需求场景:

后台开发需要上传图片并进行相应比例尺寸图片的截取,本组件开发采用Ant Design Vue组件库搭配vue-cropper插件进行封装

实现如下

vue表单上传图片数据(vue-cropper插件实现图片截取上传组件封装)

vue表单上传图片数据(vue-cropper插件实现图片截取上传组件封装)

html

  • <template>
      <li>
        <a-upload
          name="avatar"
          list-type="picture-card"
          class="avatar-uploader"
          :show-upload-list="false"
          :custom-request="customRequest"
          :before-upload="beforeUpload"
          :style="`width: ${width}; height: ${height};`"
        >
          <img
            v-if="imageUrl && !loading"
            :src="imageUrl"
            alt="avatar"
            :style="`width: ${width}; height: ${height};`"
          />
          <li v-else>
            <a-icon :type="loading ? 'loading' : 'plus'" />
            <li class="ant-upload-text">上传图片</li>
          </li>
        </a-upload>
        <a-modal
          v-model="imageCut.isShowModal"
          title="图片截取"
          width="400px"
          @ok="finish"
          @cancel="imageCut.close"
        >
          <li class="cropper-content" v-if="imageCut.isShowModal">
            <li class="cropper" style="text-align:center">
              <vueCropper
                ref="cropper"
                :img="imageCut.imgFile"
                :outputSize="outputSize"
                :outputType="outputType"
                :info="info"
                :full="full"
                :canMove="canMove"
                :canMoveBox="canMoveBox"
                :original="original"
                :autoCrop="autoCrop"
                :fixed="fixed"
                :fixedNumber="fixedNumber"
                :centerBox="centerBox"
                :infoTrue="infoTrue"
                :fixedBox="fixedBox"
              ></vueCropper>
            </li>
          </li>
        </a-modal>
      </li>
    </template>
    
  • js

  • <script>
    import { uploadImage } from '@/api/common'
    import { VueCropper } from "vue-cropper";
    export default {
      name: 'ImageUpload',
      components: { VueCropper },
      data() {
        return {
          loading: false,
          imageCut: {
            isShowModal: false,
            imgFile: '',
            init: imgFile => {
              this.imageCut.imgFile = imgFile
              this.imageCut.isShowModal = true
            },
            close: () => {
              this.imageCut.imgFile = ''
              this.imageCut.isShowModal = false
            }
          }
        }
      },
      props: {
        imageUrl: String,
        width: {
          type: String,
          default: '100px'
        },
        height: {
          type: String,
          default: '100px'
        },
        canCut: {
          type: Boolean,
          default: false
        },
        info: {
          type: Boolean,
          default: false
        }, // 裁剪框的大小信息
        outputSize: {
          type: Number,
          default: 0.8
        }, // 裁剪生成图片的质量
        outputType: {
          type: String,
          default: .jpg" alt="vue表单上传图片数据(vue-cropper插件实现图片截取上传组件封装)" border="0" />
    
  • css

  • <style lang="less">
    .avatar-uploader > .ant-upload {
      width: 100%;
      height: 100%;
    }
    .ant-upload-select-picture-card i {
      font-size: 32px;
      color: #999;
    }
    
    .ant-upload-select-picture-card .ant-upload-text {
      margin-top: 8px;
      color: #666;
    }
    .cropper-content {
      .cropper {
        width: auto;
        height: 400px;
      }
    }
    </style>
    
  • 组件使用及说明

  • <image-upload
            :imageUrl="form.diagramUrl"
            @uploadSuccess="uploadSuccess"
            width="160px"
            height="90px"
            :can-edit="canCut"
            :fixed-number="[16,9]"
          />
    
  • 组件调用时需传入canEdit属性,指定组件是否启动图片选取后的裁剪功能,默认值为不启用裁剪;需裁剪时可传入fixedNumber属性,定义裁剪框的宽高比

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    上一篇下一篇

    猜您喜欢

    热门推荐