Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: JavaScript: React Image Cropper?

walkout_ [09.04.2023 15:21:16]

#

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.

walkout_ [09.04.2023 17:04:11]

#

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);
  };

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta