Vue使用vue-cropper裁剪图片作头像

22 篇文章 1 订阅

1.安装

工程目录下运行cmd

npm install vue-cropper -S

2.引用组件

全局引入,在main.js中添加

import VueCropper from 'vue-cropper'
Vue.use(VueCropper)

3.使用裁剪框

这里httpUrl可以随意选择一张网络图片的连接作测试

        <!-- 图片裁剪框 -->
        <div style="width: 400px;height: 400px;">
            <vue-cropper autoCrop :img="httpUrl" ref="cropper" centerBox fixed :fixedNumber="[1,1]"/>
        </div>
        <button @click="getCropData()">获取截图后图片</button>

获取的数据是base64的格式,发送给后端进行解码。

      //获取裁剪后图片
      getCropData(){
          this.$refs.cropper.getCropData(data=>{
              console.log(data);
              //发起axios post请求
             this.$http.post("/saveImg",
                   {
                       base64ImageData:data,
                   }
               )
               .then((response)=>{
                   if(response.data.code === 0){//发送成功
                       this.$message({
                         message: '截取成功!!!',
                         type: 'success',
                       });
                     this.$router.go(0);
                   }
                   else{
                       this.$message.error(response.data.data.message);
                   }
               })
               .catch((error)=>{
                   //未接受到response的网络传输等错误
                   console.log(error);
               });
          })
      },

后端代码根据实际情况可能有稍微差别,主要提供思路(这里默认保存为jpg格式,其它格式需要改后缀)

    //存储截取后的图片
    @PostMapping("/saveImg")
    public CommonResult<Object> saveImg(@RequestBody String base64ImageData){
        //先解析token是否合法
        User currentUser = JwtTokenUtils.getCurrentUser();
        
        // 去掉base64前缀 data:image/jpeg;base64,一定一定     同时去掉末尾"}两个符号
        base64ImageData = base64ImageData.substring(base64ImageData.indexOf(",", 1) + 1,base64ImageData.length() - 2);
		//解码为二进制
        byte[] imageBytes = Base64.getDecoder().decode(base64ImageData);
        String outputPath = System.getProperty("user.dir")+"/upload/image/" + currentUser.getImg();
        
        Path path = Paths.get(outputPath);
        try {
        	//存在则覆盖,不存在则新建
            Files.write(path, imageBytes, StandardOpenOption.WRITE);
            return CommonResult.success();
        } catch (IOException e) {
            // 输出文件发生写入错误信息
            e.printStackTrace();
            return CommonResult.failed(ErrorCode.FILE_WRITE_FAIL.getCode(), Message.createMessage(ErrorCode.FILE_WRITE_FAIL.getMessage()));
        }
    }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值