What this tool does
The Image Resizer takes a PNG, JPEG, WebP, or GIF you drop into the page and re-encodes it at the dimension or scale you ask for. The resize, the format conversion, and the quality-vs-size trade-off all happen on a <canvas> in your tab, there is no upload, no server round-trip, no "your image is being processed" spinner that's hiding a network call.
You get a side-by-side before/after, the exact byte delta, and a download in the format you picked.
How to use it
1. Drop, paste, or pick a file. Any standard raster format works. The tool reads pixel dimensions immediately and prefills the width/height fields with the source size. 2. Set the target. Type a new width (or height, they're linked when "lock aspect" is on, free when it's off). Or hit one of the eight presets: Avatar 256, Thumb 480, OG image (1200×630), Twitter card (1200×675), Favicon 64, Half / Quarter / Double scale. 3. Pick a format and quality. WebP is the smallest at the same visual quality; JPEG is the most compatible; PNG is lossless (the quality slider is ignored). Quality 1–100 maps directly to the canvas encoder's quality argument. 4. Hit Resize. The output card shows the new file with byte count and a delta pill (-42 % when smaller, +18 % when larger). Download saves it as <original>-<w>x<h>.<format>.
How the resize actually works
The browser decodes your file into an ImageBitmap, then draws it onto an offscreen <canvas> at the target size with imageSmoothingQuality = 'high'. That uses the browser's internal Lanczos-or-similar filter, for downscaling it's the right choice. For upscaling above ~2x there's no real detail to recover, so the result looks soft; that's a fundamental property of bitmap upscaling, not a tool limitation.
canvas.toBlob(mime, quality) then re-encodes the pixels into your chosen format. WebP and JPEG accept the quality slider; PNG ignores it (PNG is lossless, so quality has no meaning).
When to use it (and when not)
Use this tool when you need a quick one-off resize: a screenshot trimmed to OG dimensions, an avatar shrunk to 256px, a hero image downsampled before upload, a thumbnail generated for a card grid. The eight presets cover ~80% of common web sizing tasks.
Don't use it for professional photo retouching (use a real editor), face-detection auto-cropping (we don't do it on purpose, heuristic cropping mangles faces in surprising ways), or batch processing of dozens of files at once. For batches you'd want a separate batch tool that streams output to a zip.
Common gotchas
- GIF input loses animation. The decoder reads the first frame only, there is no animated-WebP/animated-PNG output path in the canvas API. If you need to keep animation, use a GIF-specific encoder elsewhere.
- Free-aspect makes pixels stretch. Turn off "lock aspect" only when you actually want a non-proportional resize. Most of the time you don't.
- Color profile is dropped. The canvas converts everything to sRGB. Wide-gamut (Display P3) photos lose their extended colors. For photo workflows that need to preserve P3, this isn't the right tool.
- Quality 100 isn't lossless on JPEG. JPEG is fundamentally lossy; quality 100 just means "use the encoder's least-aggressive quantization." Use PNG when you need byte-for-byte preservation.
Privacy
All processing runs in your browser. The image you drop is decoded by createImageBitmap, drawn to a canvas, re-encoded by canvas.toBlob, and offered as a download via a local blob URL. Nothing is uploaded. There's no analytics ping that includes the image, no "save to cloud" button hiding a fetch. Close the tab and the file is gone from the page's memory.