From e12f4569be93a1c00078136f325b06852d44ed4c Mon Sep 17 00:00:00 2001 From: "[dyad]" Date: Sun, 18 Jan 2026 11:23:09 +0100 Subject: [PATCH] [dyad] Added quality settings panel - wrote 1 file(s) --- src/components/image-converter.tsx | 62 +++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 13 deletions(-) diff --git a/src/components/image-converter.tsx b/src/components/image-converter.tsx index 7e76c70..df15b94 100644 --- a/src/components/image-converter.tsx +++ b/src/components/image-converter.tsx @@ -30,6 +30,7 @@ import { AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; +import { Slider } from "@/components/ui/slider"; export function ImageConverter() { const [images, setImages] = useState([]); @@ -38,6 +39,7 @@ export function ImageConverter() { const [width, setWidth] = useState(""); const [height, setHeight] = useState(""); const [format, setFormat] = useState<"png" | "jpeg" | "webp">("png"); + const [quality, setQuality] = useState(80); const [prefix, setPrefix] = useState(""); const [suffix, setSuffix] = useState(""); @@ -168,7 +170,8 @@ export function ImageConverter() { if (ctx) { ctx.drawImage(img, 0, 0, Number(width), Number(height)); - const dataUrl = canvas.toDataURL(`image/${format}`); + const mimeType = `image/${format}`; + const dataUrl = canvas.toDataURL(mimeType, format === 'png' ? undefined : quality / 100); const link = document.createElement("a"); link.href = dataUrl; const finalFilename = generateFinalFilename(index); @@ -213,7 +216,7 @@ export function ImageConverter() {
Image Settings - Adjust resolution and format for all uploaded images. + Adjust resolution for all uploaded images.
@@ -229,17 +232,6 @@ export function ImageConverter() { setHeight(e.target.value)} /> -
- - -
@@ -302,6 +294,50 @@ export function ImageConverter() { + + + + +
+ Quality Settings + Choose format and compression level. +
+
+ +
+
+ + +
+
+
+ + {quality}% +
+ setQuality(value[0])} + disabled={format === 'png'} + /> + {format === 'png' && ( +

Quality slider is disabled for PNG (lossless format).

+ )} +
+
+
+
+