import type { Area } from "react-easy-crop"; const createImage = (url: string): Promise => new Promise((resolve, reject) => { const image = new Image(); image.addEventListener("load", () => resolve(image)); image.addEventListener("error", (error) => reject(error)); image.src = url; }); const getCroppedImg = async ( imageSrc: string, pixelCrop: Area | null ): Promise => { const image = await createImage(imageSrc); const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); if (!ctx || !pixelCrop) { return null; } canvas.width = image.width; canvas.height = image.height; ctx.drawImage(image, 0, 0); const data = ctx.getImageData( pixelCrop.x, pixelCrop.y, pixelCrop.width, pixelCrop.height ); canvas.width = pixelCrop.width; canvas.height = pixelCrop.height; ctx.putImageData(data, 0, 0); return canvas; }; export default getCroppedImg;