Hei,
En keksi syytä miksi tämän linkin takana oleva koodi ei toimi ollenkaan paikallisella koneellani kun käynnistän käskyt npm install ja sitten npm start komentorivillä.
https://codesandbox.io/s/crop-and-upload-react-uploady-uyl4e?file=/src/App.js
Eli siis se toimii vain niin, että kuvan voi uploadata vain ilman croppausta ja croppaustoiminto ei toimi ollenkaan.
Okei käytin Chat CPT:tä ja sain sieltä vaihtoehtoisen toimivan koodin.
import React, { useState, useCallback } from "react";
import Cropper from "react-easy-crop";
import { getCroppedImg } from "./cropImage";
const ImageCropper = ({ imageSrc, onCropComplete }) => {
const [crop, setCrop] = useState({ x: 0, y: 0 });
const [zoom, setZoom] = useState(1);
const [cropArea, setCropArea] = useState(null);
const onCropChange = useCallback((crop) => {
setCrop(crop);
}, []);
const onCropCompleteHandler = useCallback((croppedArea, croppedAreaPixels) => {
setCropArea(croppedArea);
onCropComplete(croppedArea);
}, []);
const onZoomChange = useCallback((zoom) => {
setZoom(zoom);
}, []);
const cropImage = useCallback(async () => {
try {
const croppedImage = await getCroppedImg(imageSrc, cropArea);
console.log("done!", { croppedImage });
} catch (e) {
console.error(e);
}
}, [cropArea, imageSrc]);
return (
<div>
<Cropper
image={imageSrc}
crop={crop}
zoom={zoom}
aspect={1 / 1}
onCropChange={onCropChange}
onCropComplete={onCropCompleteHandler}
onZoomChange={onZoomChange}
/>
<button onClick={cropImage}>Crop Image</button>
</div>
);
};
export default ImageCropper;export const getCroppedImg = async (imageSrc, crop) => {
const image = new Image();
image.src = imageSrc;
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
canvas.width = crop.width;
canvas.height = crop.height;
ctx.drawImage(
image,
crop.x,
crop.y,
crop.width,
crop.height,
0,
0,
crop.width,
crop.height
);
const blob = await new Promise((resolve) => {
canvas.toBlob((blob) => {
resolve(blob);
}, "image/jpeg");
});
return URL.createObjectURL(blob);
};Aihe on jo aika vanha, joten et voi enää vastata siihen.