You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目中如何获取cropper.js的实际选区内容?

获取Cropper.js选区内容的实现方案

1. 用Ref获取Cropper实例

在React组件里,先通过useRef创建引用,绑定到<cropper-canvas>上,才能调用Cropper的核心API:

import { useRef } from 'react';

// 组件内部声明ref
const cropperRef = useRef(null);

修改你的cropper-canvas标签,绑定ref:

<cropper-canvas ref={cropperRef} background>
    {/* 原有内部元素保持不变 */}
</cropper-canvas>

2. 实现保存函数获取裁剪内容

在saveImg1函数里,通过ref拿到Cropper实例,调用getCroppedCanvas()方法获取裁剪后的画布,再根据需求转成可保存/上传的格式:

const saveImg1 = () => {
  const cropper = cropperRef.current?.cropper;
  if (!cropper) return;

  // 获取裁剪后的canvas对象,可自定义输出尺寸
  const croppedCanvas = cropper.getCroppedCanvas({
    width: 400,
    height: 400,
  });

  // 方式1:转成DataURL实现本地下载
  const dataUrl = croppedCanvas.toDataURL('image/png');
  const downloadLink = document.createElement('a');
  downloadLink.href = dataUrl;
  downloadLink.download = 'cropped-img.png';
  downloadLink.click();

  // 方式2:转成Blob用于上传服务器
  croppedCanvas.toBlob((blob) => {
    const formData = new FormData();
    formData.append('croppedImage', blob, 'cropped-img.png');
    // 这里替换成你的上传接口
    // fetch('/api/upload', { method: 'POST', body: formData });
  }, 'image/png');
};

3. 优化图片渲染逻辑(可选)

替代直接操作canvas.src,用Cropper官方的replace方法设置图片,更符合组件规范:

const handleImg1 = (e) => {
  const file = e.target.files[0];
  if (!file) return;
  const cropper = cropperRef.current?.cropper;
  if (cropper) {
    const reader = new FileReader();
    reader.onload = () => cropper.replace(reader.result);
    reader.readAsDataURL(file);
  }
};

内容的提问来源于stack exchange,提问作者Pizzaboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:15:33