Free Image Resizer Online

Resize images to exact pixel dimensions. Maintain aspect ratio or set custom width and height. No upload to any server.

Your files never leave your device
Drop an image here or click to browse

Supports JPEG, PNG, and WebP · up to 20 MB

How to Resize an Image

  1. Select or drop an image file above.
  2. Choose a preset size or enter custom width and height in pixels.
  3. Toggle the lock icon to maintain or ignore the original aspect ratio.
  4. Click "Resize Image" to process the image in your browser.
  5. Download the resized image instantly.

What "resizing" actually does to your pixels

Resizing an image is not the same operation as cropping or compressing it. Cropping discards pixels at the edges and keeps the rest unchanged. Compressing keeps every pixel but encodes them more tightly. Resizing literally changes the pixel count: a 4000x3000 source image rescaled to 1920x1440 has to throw away most of its pixels and pick new ones to represent the same scene at a quarter of the resolution. The mathematical operation that decides which new pixels to write is called resampling, and the quality of the rescale depends almost entirely on which resampling algorithm runs.

The four resampling algorithms in common use are nearest-neighbour (pick the single closest source pixel, hard edges preserved, blocky on enlargement, the only right choice for pixel art), bilinear (linear blend of the 4 surrounding source pixels, fast and mediocre), bicubic (Keys 1981 cubic kernel over 16 surrounding pixels, the Photoshop default for decades), and Lanczos (sinc function windowed by a Lanczos kernel, sharpest output, mild ringing near hard edges, what ImageMagick and Sharp use by default for downscale). This tool sets the Canvas API's imageSmoothingQuality to "high", which Chrome and Firefox interpret as a Lanczos-class kernel on desktop and Safari interprets as a bicubic-class kernel. The browser chooses; JavaScript can ask for "high" but cannot pick the exact filter.

Downscaling and upscaling are not symmetric problems. Downscaling discards information in a controlled way; the resampler decides which details to keep and a good algorithm preserves the visible structure of the source. Upscaling adds pixels that were never sampled, and information theory (the Nyquist-Shannon sampling theorem) says you cannot recover frequencies that were not in the original signal. The best a classical resampler can do is interpolate smoothly between known samples, which always looks soft. For genuine enlargement the modern alternative is AI super-resolution (Real-ESRGAN, waifu2x, Adobe Super Resolution, Topaz Gigapixel), which hallucinates plausible detail using neural networks trained on millions of similar images. That is not what is happening here. This tool does honest interpolation.

How this tool works under the hood

The entire pipeline is the HTML5 Canvas 2D API. No external library is loaded. When you drop an image, the browser's File API hands the bytes to a new HTMLImageElement; the browser's built-in JPEG, PNG, or WebP decoder turns the bitstream into a pixel buffer. The aspect ratio is computed from the natural width and height. A fresh <canvas> element is created in memory at the target dimensions you set, and ctx.drawImage(image, 0, 0, targetWidth, targetHeight) draws the source scaled into the destination. Because the destination has different dimensions than the source, the browser invokes its resampling kernel to compute every new pixel.

Before the drawImage call, the tool sets ctx.imageSmoothingEnabled = true and ctx.imageSmoothingQuality = "high". The first flag turns smoothing on (nearest-neighbour off); the second hints the browser to use its highest-quality filter. The WHATWG canvas specification leaves the exact filter to the implementation. Chrome and Firefox on desktop use Lanczos-class kernels at "high"; Safari uses a bicubic-class kernel; mobile builds may downgrade to bilinear under memory pressure. None of this is visible to JavaScript. After the draw, canvas.toBlob(mimeType, quality) serialises the canvas to a Blob in your chosen output format: PNG (lossless DEFLATE, the quality argument is ignored), JPEG (lossy DCT at quality 0.92), or WebP (lossy or lossless at quality 0.92). The Blob becomes a downloadable object URL.

No bytes leave the tab. The image is decoded in your browser, resampled in your browser, and re-encoded in your browser. The downloaded file is generated locally and saved to your device by the browser's normal download mechanism. The only network traffic is the initial page load and the small image-resizer.js script (a few kilobytes). Switch your browser to airplane mode after the page has loaded and the resizer continues to work on any local image you select. Open DevTools' Network tab during a resize: there are zero requests carrying image data. The entire architecture is intentionally minimal because the Canvas API is already powerful enough for this job; pulling in a library would only add bytes and complexity without changing the output.

A brief history of image resampling

Common Image Sizes

Real-world resize workflows

Common pitfalls and what they mean

Privacy: images never leave your device

Every cloud-based image resizer (iLoveIMG, ResizeImage.net, ResizePixel, BeFunky, Fotor, Pixlr's resize endpoint, the dozens of "resize image online" services) uploads your file to the operator's servers, runs their resize algorithm, and returns the smaller image as a download. The privacy implications are non-trivial because photos routinely contain identifiable content: faces, addresses visible in backgrounds, screenshots of internal UIs or confidential documents, photos of children, photos taken in private spaces, document scans containing personal information. Most operators publish privacy policies committing to delete uploads within an hour or two and to encrypt in transit, and the bigger ones hold ISO/IEC 27001 certification. They have strong commercial reasons to honour those policies. But "deleted within an hour" is not "never seen." During that hour the image content sits in the operator's infrastructure, accessible to any process or person with appropriate access, and visible in logs and backups according to whatever retention policy applies.

This resizer never uploads anything. The entire pipeline (file pick, image decode, canvas resize, encode, download) runs inside your browser tab using JavaScript and the HTML5 Canvas API. No upload, no network request carrying image data, no log entry. You can verify by opening the browser developer tools to the Network tab before resizing: no requests fire that include image content. The only network traffic is the initial page load and a small image-resizer.js script. Switch the browser to airplane mode after the page has loaded and the resizer keeps working on any local file you select, the strongest empirical proof that nothing is being uploaded. For photos with anything sensitive (faces, locations, internal screenshots, ID documents), the browser-side trade is obviously worth making.

When another tool is the right choice

Frequently Asked Questions

Will resizing reduce image quality?

Scaling down preserves quality well. Scaling up (making an image larger than its original) will result in some blurriness since new pixels must be interpolated. For best results, start with the highest resolution source image you have.

What does "lock aspect ratio" do?

When locked, changing the width automatically adjusts the height (and vice versa) to maintain the image's original proportions. Unlock it if you need to stretch or squish the image to exact dimensions.

Is my image uploaded to a server?

No. All resizing happens locally in your browser using the HTML5 Canvas API. Your image never leaves your device.

Can I change the output format?

Yes. You can output the resized image as JPEG, PNG, or WebP regardless of the original format. This is useful for converting formats while resizing.

More frequently asked questions

What's the difference between DPI, PPI, and pixel dimensions?

Pixel dimensions (width by height in pixels) describe what the image actually contains. PPI (pixels per inch) describes how densely those pixels are packed when shown on a screen, a property of the display hardware, not the file. DPI (dots per inch) describes how many printer-output dots will be laid down per inch of paper when the image is printed. The DPI tag embedded in a JPEG or PNG is advisory metadata for printers; it does not change the pixel data. A 1920x1080 image is 1920x1080 pixels at any DPI setting. To shrink a print, either reduce the pixel count (this tool) or increase the DPI metadata before sending to print (a desktop tool's Print dialog or Photoshop's Image Size with "Resample Image" turned off).

Why does my upscaled image look blurry?

Because information theory says it must. Classical resampling (bicubic, Lanczos, Mitchell) can only interpolate smoothly between known source pixels; it cannot invent the detail that was never sampled. The Nyquist-Shannon sampling theorem sets a hard ceiling: frequencies above half the source's pixel-grid rate are mathematically unrecoverable. Enlarging a 200-pixel source to 1920 pixels will always look soft because 90% of the new pixels are interpolated. For sharp enlargement use a super-resolution model (Real-ESRGAN, Topaz Gigapixel, Adobe Super Resolution) that synthesises plausible detail via a neural network trained on millions of similar images.

Should I resize for retina or HiDPI screens?

Yes. Retina iPhone, MacBook, and HiDPI Windows screens render at 2x or 3x the logical CSS pixel density. A hero image that displays at 1200 logical pixels wide on a retina screen actually paints 2400 physical pixels. Serve the 2x source via HTML's srcset attribute (the modern responsive-images standard) and the browser picks the right one for each viewer's device. For a single avatar or hero image without srcset, just resize to 2x the displayed size: the image will be sharp on retina and only slightly oversized on non-retina, which costs a small amount of bandwidth but avoids the much more visible blur of an under-sized image stretched across high-density pixels.

Does this tool work offline?

Yes. The HTML5 Canvas API is part of the browser itself, not a downloaded library, so there is no separate runtime to cache. The page loads in the usual way; once it is open, the resizer runs entirely from browser-builtin code on any local file you select. You can verify by switching to airplane mode after opening the page and resizing a local image. The downloaded result is generated locally and saved by the browser's normal download mechanism, also without any network involvement.

Should I crop before resizing, or after?

Crop first, then resize. Cropping sets the aspect ratio (16:9 for YouTube, 1:1 for Instagram feed, 9:16 for Stories, 1.91:1 for Open Graph) by discarding unwanted edge pixels. Resizing then sets the pixel count for the chosen aspect ratio. Doing the steps in the other order is also possible but wastes work, you would resample more pixels than you need and then throw some away during the crop. For this tool, use the Image Cropper first to set the aspect ratio, then this Image Resizer to set the exact target dimensions. Many platform-specific workflows (YouTube thumbnail at 1280x720, Instagram feed at 1080x1080) combine both steps; doing them in sequence with two purpose-built tools gives cleaner output than trying to do both at once with stretched aspect ratios.

Is there a desktop or command-line equivalent?

Several. For batch automation, sharp in Node.js is the standard server-side library (built on libvips). ImageMagick (magick input.jpg -resize 1920x1080 output.jpg) and GraphicsMagick run from any shell and handle huge files. Pillow in Python (Image.open(p).resize((1920, 1080), Image.LANCZOS)) is the default for data-science workflows. For one-off interactive work like this tool but with explicit per-kernel control and more output formats including AVIF, Squoosh (Google Chrome Labs, entirely client-side) is the recommended browser alternative. Photoshop, Affinity Photo, and Preview on macOS (Tools, Adjust Size) cover the desktop GUI case.

Related Tools