通过 react-image-crop 模块获取裁剪图像

Posted

技术标签:

【中文标题】通过 react-image-crop 模块获取裁剪图像【英文标题】:Get cropped image via react-image-crop module 【发布时间】:2018-09-11 10:28:55 【问题描述】:

您能帮我如何通过 react-image-crop 模块获取输出(裁剪图像的来源)吗? 上传组件如下所示:

class MyUpload extends Component 
constructor() 
    super();
    this.state = 
        src: 'source-to-image',
        crop: 
            x: 10,
            y: 10,
            aspect: 9 / 16,
            width: 100
        
    


onCropComplete = (crop, pixelCrop) => 
    this.setState(
        crop
    )
;

render() 
    return (
           <ReactCrop
                    src=this.state.src
                    onComplete=this.onCropComplete
                />
    );
 

方法 onCropComplete 只返回裁剪图像的坐标、宽度和高度,而不是源。我想获取 blob 文件。


编辑(工作解决方案——感谢 Mosè Raguzzini 的回复):

如果有人遇到类似问题,请在组件的教程中调用 getCropptedImg 函数,并从返回的 Blob 对象创建 url,如下所示:

getCroppedImg(this.state.image, pixelCrop, 'preview.jpg')
            .then((res) => 
                const blobUrl = URL.createObjectURL(res);
                console.log(blobUrl); // it returns cropped image in this shape of url: "blob:http://something..."
            )

【问题讨论】:

这里是一个例子codesandbox.io/s/72py4jlll6?file=/src/index.js 【参考方案1】:

react-image-crop 不是用来生成 blob,只是用来裁剪图像。可能你需要类似https://foliotek.github.io/Croppie/

更新: 检查“如何在客户端显示作物?”部分在底部 https://www.npmjs.com/package/react-image-crop,blob 可作为隐藏功能使用

/**
 * @param File image - Image File Object
 * @param Object pixelCrop - pixelCrop Object provided by react-image-crop
 * @param String fileName - Name of the returned file in Promise
 */
function getCroppedImg(image, pixelCrop, fileName) 
 
  const canvas = document.createElement('canvas');
  canvas.width = pixelCrop.width;
  canvas.height = pixelCrop.height;
  const ctx = canvas.getContext('2d');
 
  ctx.drawImage(
    image,
    pixelCrop.x,
    pixelCrop.y,
    pixelCrop.width,
    pixelCrop.height,
    0,
    0,
    pixelCrop.width,
    pixelCrop.height
  );
 
  // As Base64 string
  // const base64Image = canvas.toDataURL('image/jpeg');
 
  // As a blob
  return new Promise((resolve, reject) => 
    canvas.toBlob(file => 
      file.name = fileName;
      resolve(file);
    , 'image/jpeg');
  );

 
async test() 
  const croppedImg = await getCroppedImg(image, pixelCrop, returnedFileName);

【讨论】:

谢谢。我不得不忽略它。

以上是关于通过 react-image-crop 模块获取裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章

swift photos 获取相册所有图片 自定义多选附编号 自定义裁切

canvas压缩裁切图片和格式转换的方法

ABAPSAP供应商自定义决裁生成实现

ABAPSAP供应商自定义决裁生成实现

被公司裁掉的我,通过自己的努力拿到了阿里offer(总结)

global mapper怎样裁切dem