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.