Staaarter

JPG Quality Changer

Uploads a JPG, decodes it onto an off-screen canvas, and re-encodes it as a real JPEG at a quality percentage you choose from 1-100, then shows the resulting file size next to the original so you can see exactly what the tradeoff costs before downloading. A free online tool from Staaarter, right in your browser.

Runs locallyUpdated 2026-07-29
By Staaarter Team
editorcompressionimagecanvasjpg

Overview

Introduction

This tool lets you re-encode a JPG at any quality level from 1 to 100, entirely in your browser, and see exactly how that choice affects file size before you commit to it.

Because JPEG's quality parameter is a real, native part of its encoder, the result you see is the same tradeoff any image editor's 'export quality' slider produces, not an approximation.

What Is JPG Quality Changer?

A client-side JPEG re-encoder that decodes an uploaded JPG onto a canvas and passes it back through the browser's own JPEG encoder at a quality value you control.

The tool reports the original and re-encoded file sizes side by side so the size/quality tradeoff is concrete rather than abstract.

How JPG Quality Changer Works

Your chosen 1-100 percentage is divided by 100 to get the 0-1 quality argument canvas.toBlob expects for image/jpeg output; the browser's encoder then does the real compression work.

The tool decodes the resulting blob back into pixels (via createImageBitmap) so what you see in the preview, and what downloads, is the genuine re-encoded image rather than the untouched original pixels with a label attached.

When To Use JPG Quality Changer

Use it whenever you need to shrink a JPG for faster page loads, smaller email attachments, or tighter storage budgets, and want to see the size result before you commit.

It's also useful for finding the lowest quality that still looks acceptable for a specific photo, since compressibility varies a lot by image content.

Features

Advantages

  • Performs a genuine JPEG re-encode, not a simulated effect: the size numbers and visible artifacts are real.
  • Runs entirely client-side; your image is never uploaded to a server.
  • Shows original vs. re-encoded size immediately so you can iterate quickly.

Limitations

  • Very low quality settings can introduce visible blockiness; if that's the point, see the dedicated Artifacts Adder for a tool framed around exaggerating it intentionally.
  • Re-encoding a JPG that's already been compressed at low quality compounds generational loss, same as any repeated JPEG re-save.

Examples

Shrink a photo for web use

Input

A 2.4 MB JPG at quality 92

Output

Re-encoded at quality 60, resulting in roughly a 600 KB file with only mild softening

Most photographic content tolerates a meaningful quality drop before artifacts become obvious.

Explore an aggressive size cut

Input

Any JPG, quality 15

Output

A much smaller file with visible blocky compression artifacts

Very low quality trades a lot of visual fidelity for file size; useful to see exactly where that line is for your image.

Best Practices & Notes

Best Practices

  • Start near 80-90% quality and step down while watching the preview, rather than guessing a low number up front.
  • For photos destined for print or further editing, keep quality high; save aggressive settings for disposable or thumbnail-sized uses.

Developer Notes

resolveJpgQuality is the pure validation/mapping half (percent-to-0-1 quality, input checks); the actual canvas.toBlob("image/jpeg", quality) encode and createImageBitmap decode-back happen in the component, since both are DOM-only APIs that can't live in a Node-testable lib function.

JPG Quality Changer Use Cases

  • Shrinking photos before uploading them to a size-limited platform
  • Finding the lowest acceptable quality for a specific image
  • Comparing file-size tradeoffs before choosing a final export setting

Common Mistakes

  • Assuming a 'quality' change here is cosmetic only: it's a real re-encode that changes the actual bytes and, at low settings, the visible pixels.
  • Re-running this tool repeatedly on its own output and being surprised by compounding generational loss.

Tips

  • Compare a couple of quality values side by side using the size readout to find your sweet spot quickly.
  • If you don't want to hunt for a number, try the Compressor's fixed presets or the Optimizer's one-click default instead.

References

Frequently Asked Questions