diff --git a/src/components/submit-form/crop-portrait.tsx b/src/components/submit-form/image-editor.tsx similarity index 79% rename from src/components/submit-form/crop-portrait.tsx rename to src/components/submit-form/image-editor.tsx index 8b0ed7f..df1069a 100644 --- a/src/components/submit-form/crop-portrait.tsx +++ b/src/components/submit-form/image-editor.tsx @@ -11,7 +11,7 @@ interface Props { setImage: React.Dispatch>; } -export default function CropPortrait({ isOpen, setIsOpen, image, setImage }: Props) { +export default function ImageEditorPortrait({ isOpen, setIsOpen, image, setImage }: Props) { const [isVisible, setIsVisible] = useState(false); const [crop, setCrop] = useState(); @@ -38,9 +38,27 @@ export default function CropPortrait({ isOpen, setIsOpen, image, setImage }: Pro ctx.drawImage(image, crop.x * scaleX, crop.y * scaleY, crop.width * scaleX, crop.height * scaleY, 0, 0, crop.width * scaleX, crop.height * scaleY); setImage(canvas.toDataURL()); - close(); + setCrop(undefined); }, [crop, setImage]); + const rotate = () => { + if (!imageRef.current || !canvasRef.current) return; + + const image = imageRef.current; + const canvas = canvasRef.current; + const ctx = canvas.getContext("2d"); + if (!ctx) return; + + canvas.width = image.naturalHeight; + canvas.height = image.naturalWidth; + + ctx.translate(canvas.width / 2, canvas.height / 2); + ctx.rotate(Math.PI / 2); + ctx.drawImage(image, -image.naturalWidth / 2, -image.naturalHeight / 2); + + setImage(canvas.toDataURL()); + }; + const close = () => { setIsVisible(false); setTimeout(() => { @@ -68,7 +86,7 @@ export default function CropPortrait({ isOpen, setIsOpen, image, setImage }: Pro }`} >
-

Crop Portrait

+

Edit Image

@@ -88,6 +106,9 @@ export default function CropPortrait({ isOpen, setIsOpen, image, setImage }: Pro +
diff --git a/src/components/submit-form/switch-file-upload.tsx b/src/components/submit-form/switch-file-upload.tsx index b774e39..d606690 100644 --- a/src/components/submit-form/switch-file-upload.tsx +++ b/src/components/submit-form/switch-file-upload.tsx @@ -5,7 +5,7 @@ import { FileWithPath } from "react-dropzone"; import { Icon } from "@iconify/react"; import Dropzone from "../dropzone"; import Camera from "./camera"; -import CropPortrait from "./crop-portrait"; +import ImageEditorPortrait from "./image-editor"; interface Props { text: string; @@ -55,8 +55,8 @@ export default function SwitchFileUpload({ text, forceCrop, image, setImage }: P Use your camera - + ); }