gpt4 book ai didi

javascript - ReactCrop 预览不渲染

转载 作者:行者123 更新时间:2023-12-05 03:22:43 25 4
gpt4 key购买 nike

我想为我的 Web 应用程序实现图像裁剪功能,并了解到 react-image-crop 是实现该功能的最佳 npm 包。但是,出于某种原因,ReactCrop 组件提供的预览没有在我的视口(viewport)上呈现。

这是我一直在使用的代码。

import { useState } from 'react';
import ReactCrop from 'react-image-crop';
import 'react-image-crop/dist/ReactCrop.css';

function App() {
const [src, setSrc] = useState(null);
const [crop, setCrop] = useState({ aspect: 16 / 9 });
const [image, setImage] = useState(null);
const [output, setOutput] = useState(null);

const selectImage = (file) => {
setSrc(URL.createObjectURL(file));
};

const cropImageNow = () => {
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');
setOutput(base64Image);
};

return (
<div>
<div>
<input
type="file"
accept="image/*"
onChange={(e) => {
selectImage(e.target.files[0]);
}}
/>
<br />
<br />
<div>
{src && (
<div>
<ReactCrop src={src} onImageLoaded={setImage}
crop={crop} onChange={setCrop} />
<br />
<button onClick={cropImageNow}>Crop</button>
<br />
<br />
</div>
)}
</div>
<div>{output && <img src={output} />}</div>
</div>
</div>
);
}

export default App;

最佳答案

我使用的代码没有任何问题。我能够通过将 react-image-crop 依赖项降级为“^8.6.12”来解决这个问题。似乎最新版本的 npm 包有问题。

关于javascript - ReactCrop 预览不渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72656236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com