React通过react-cropper插件实现图片自定义剪切功能

项目里有一个需求,上传图片后可以对这张图片任意剪切,试了一些插件我感觉这个是最好用的:

1.安装 react-cropper 插件:

npm install react-cropper

2.导入 react-cropper 组件:

import React, { useRef, useState } from 'react';
import Cropper from 'react-cropper';
import 'cropperjs/dist/cropper.css';

3.创建组件:

import React, { useRef, useState } from 'react';
import Cropper from 'react-cropper';
import 'cropperjs/dist/cropper.css';
function cropper() {
  const cropperRef = useRef(null);

  const handleCrop = () => {
    const imageElement: any = cropperRef?.current;
    const cropper: any = imageElement?.cropper;
    const back64Cropper = cropper.getCroppedCanvas().toDataURL();
    console.log(cropper.getCroppedCanvas().toDataURL("image/jpeg"), "裁剪的base64编码");
    const base64Data = back64Cropper; // base64 格式的图像数据
    const url = base64ToUrl(base64Data); // 转换为 URL
    console.log(url, "剪切url"); // 输出 URL
  };
  function base64ToUrl(base64Data: any) {
    const blob = base64ToBlob(base64Data); // 将 base64 转为 Blob
    const url = URL.createObjectURL(blob); // 生成 URL
    return url;
  }
  function base64ToBlob(base64Data: any) {
    const byteString = atob(base64Data.split(',')[1]); // 将 base64 的数据部分解码成二进制数据
    const mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0]; // 获取 MIME 类型
    const ab = new ArrayBuffer(byteString.length);
    const ia = new Uint8Array(ab);
    for (let i = 0; i < byteString.length; i++) {
      ia[i] = byteString.charCodeAt(i);
    }
    return new Blob([ab], { type: mimeString }); // 生成 Blob 对象
  }
  return (
    <div>
      <Cropper
        ref={cropperRef}
        src="https://img2.baidu.com/it/u=1361506290,4036378790&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500"
// 你所需要剪切图片的路径
        style={{ height: 400, width: '100%' }}
      // 设置其他相关参数,例如裁剪框宽高比、裁剪框移动限制等
      />
      <button onClick={handleCrop}>Crop</button>
      
    </div>
  )
}

export default cropper

这样即可实现对图片的剪切,常见场景运用在antd的Upload组件里,当上传完成后对图片剪切,这里实现了剪切的demo,有相关需求的话根据场景自己做改动

 

控制台内打印出剪切后的url 传递即可

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值