import { useContext, useState } from 'react' import { ImageIcon, Wand2 } from 'lucide-react' import { fabric } from 'fabric' import CanvasContext from '@/components/Context/canvasContext/CanvasContext' import { Label } from '@/components/ui/label' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Button } from '@/components/ui/button' import { Slider } from '@/components/ui/slider' import { Separator } from '@/components/ui/separator' const ImageCustomization = () => { const { canvas } = useContext(CanvasContext) const [shadowColor, setShadowColor] = useState("#000000") const [highlightColor, setHighlightColor] = useState("#ffffff") const [blendMode, setBlendMode] = useState("multiply") const [filterType, setFilterType] = useState("sepia") const [filterIntensity, setFilterIntensity] = useState(0.5) const applyDuotoneFilter = () => { if (!canvas) return const activeObject = canvas.getActiveObject() if (!activeObject || activeObject.type !== "image") { console.warn("No active image object selected.") return } activeObject.filters = [ new fabric.Image.filters.BlendColor({ color: shadowColor, mode: blendMode, }), new fabric.Image.filters.BlendColor({ color: highlightColor, mode: "screen", }), ] activeObject.applyFilters() canvas.renderAll() } const createFilter = (value) => { let effect switch (value) { case 'sepia': effect = new fabric.Image.filters.Sepia() break case 'contrast': effect = new fabric.Image.filters.Contrast({ contrast: filterIntensity }) break case 'brightness': effect = new fabric.Image.filters.Brightness({ brightness: filterIntensity }) break case 'grayscale': effect = new fabric.Image.filters.Grayscale() break case 'invert': effect = new fabric.Image.filters.Invert() break case 'blur': effect = new fabric.Image.filters.Blur({ blur: filterIntensity, }) break case 'pixelate': effect = new fabric.Image.filters.Pixelate({ blocksize: filterIntensity * 10, }) break case 'huerotation': effect = new fabric.Image.filters.HueRotation({ rotation: filterIntensity * 360, }) break case 'noise': effect = new fabric.Image.filters.Noise({ noise: filterIntensity * 100, }) break default: effect = null } return effect } const applyFilter = () => { if (!canvas) return const activeObject = canvas.getActiveObject() if (!activeObject || activeObject.type !== "image") { console.warn("No active image object selected.") return } const filter = createFilter(filterType) if (filter) { activeObject.filters = [filter] activeObject.applyFilters() canvas.renderAll() } } const revertFilters = () => { if (!canvas) return const image = canvas.getActiveObject() if (image) { image.filters = [] image.applyFilters() canvas.renderAll() } } return (