demo.mp4
npm install react-polygon-image-cropper
import React, { useRef, useState } from "react";
// import the Canvas component
import { Canvas } from "react-polygon-image-cropper";
// *important* import the styles for the component
import "react-polygon-image-cropper/dist/style.css";
function App() {
const [url, setUrl] = useState("");
const [source, setSource] = useState<any>("");
const buttonRef = useRef(null);
const resetRef = useRef(null);
const rescaleRef = useRef(null);
const saveRef = useRef(null);
const saveCallback = (imageUrl: any) => setUrl(imageUrl);
const handleImage = (e: React.ChangeEvent<HTMLInputElement>) => {
const reader = new FileReader();
reader.onload = function (event) {
if (event.target) setSource(event.target.result);
};
if (e.target.files) reader.readAsDataURL(e.target.files[0]);
};
return (
<div className="App">
<Canvas
width={500}
height={500}
source={source}
radius={30}
color="red"
cropEvent={{ elementRef: buttonRef, eventType: "click" }}
rescaleEvent={{ elementRef: rescaleRef, eventType: "click" }}
resetEvent={{ elementRef: resetRef, eventType: "click" }}
saveProps={{ saveRef, saveCallback }}
styles={{
border: "1px solid red",
display: "flex",
alignItems: "center",
}}
/>
<input type="file" accept="image/png" onChange={(e) => handleImage(e)} />
<button ref={buttonRef}>Crop</button>
<button ref={rescaleRef}>Rescale</button>
<button ref={resetRef}>Reset</button>
<button ref={saveRef}>Save</button>
<img src={url} />
</div>
);
}
Prop | Type | Required | Description |
---|---|---|---|
width | number | true | Width of the image canvas |
height | number | true | Height of the image canvas |
source | string | true | Source string for the image. Can be a URL or local image (e.g. in assets) |
radius | number | true | Radius of the handles |
color | string | true | Fill color of the handles |
cropEvent | EventListenerProps | false | Used to attach a HTMLEvent to a React.RefObject in order to trigger a crop function |
resetEvent | EventListenerProps | false | Used to attach a HTMLEvent to a React.RefObject in order to trigger a reset function |
rescaleEvent | EventListenerProps | false | Used to attach a HTMLEvent to a React.RefObject in order to trigger a rescale function |
saveProps | SaveProps | false | Used to attach a HTMLEvent to a React.RefObject in order to trigger a save callback which passes the data url of the final canvas (after rescale). |
styles | React.CSSProperties | false | Used to style the bounding box for the canvases |
customCallback | CustomCallbackProps | false | Passes the React.RefObject for all 3 canvases to be used in custom logic |
- Clone the repository.
You can run the local example with:
npm run dev
- Create a new branch for your new pull request