首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reactjs:如何使用drawImage

Reactjs:如何使用drawImage
EN

Stack Overflow用户
提问于 2022-09-06 12:19:50
回答 1查看 31关注 0票数 1

在我的项目中,使用react图像-裁剪包来裁剪图像.但这提供了一些错误

代码语言:javascript
复制
import React, { useState } from 'react'
import ReactCrop  from 'react-image-crop'
import 'react-image-crop/dist/ReactCrop.css'



export const Imagecrop = () => {
    
    const [src, setSrc] = useState(null)
    const handleFileChange = e =>{
        console.log(e.target.files[0])
        setSrc(URL.createObjectURL(e.target.files[0]))
        console.log("src", src)
    }
    const [image, setImage] = useState(null)
    const [crop, setCrop] = useState()
    const [result, setResult] = useState(null);    

    const cropImageNow = () => {
        console.log("image", image)
        const canvas = document.createElement('canvas');
        const scaleX = image?.naturalWidth / image?.width;
        const scaleY = image?.naturalHeight / image?.height;
        canvas.width = crop.width;
        canvas.height = crop.height;
        const ctx = canvas.getContext('2d');
      
        const pixelRatio = window.devicePixelRatio;
        canvas.width = crop.width * pixelRatio;
        canvas.height = crop.height * pixelRatio;
        ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
        ctx.imageSmoothingQuality = 'high';

        // ctx.drawImage(
        //   image,
        //   crop.x * scaleX,
        //   crop.y * scaleY,
        //   crop.width * scaleX,
        //   crop.height * scaleY,
        //   0,
        //   0,
        //   crop.width,
        //   crop.height,
        // );
          
        // Converting to base64
        const base64Image = canvas.toDataURL('image/jpeg');
        setResult(base64Image);
      };

    return (
        <div className='container'>
            <div className='row'>
                <div className='col-6'>
                    <input type='file' accept='image/*' onChange={handleFileChange} />
                </div>
                <div className='col-6'>
                {src && (
                    <ReactCrop crop={crop} aspect={800 / 200} onChange={setCrop}>
                        <img src={src} />
                    </ReactCrop>
                    
                    
                )}
                {src && <button onClick={cropImageNow}>crop</button>}
                
                </div>
                {result && <div>
                    <img src={result} alt="croped image" className='img-fluid'/>
                    </div>}

            
            </div>
        </div>
    )
}

结果是

当取消这些行的注释时

代码语言:javascript
复制
ctx.drawImage(
          image,
          crop.x * scaleX,
          crop.y * scaleY,
          crop.width * scaleX,
          crop.height * scaleY,
          0,
          0,
          crop.width,
          crop.height,
        );

会产生一个错误

如何在最后一栏中得到裁剪的图像?有没有任何可能的方法,使用反应-图像裁剪显示裁剪的图像,而不使用drawImage?请给我一个解决办法来解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2022-09-06 12:50:59

我已经制定了一个解决方案,使用反应图像裁剪,您可以在沙箱演示中看到的图像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73621948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档