Bhinish Dhiman
How to enlarge an image without it going blurry, and what upscaling cannot do
Load the image, choose 1.5×, 2×, 3× or 4× (or a target width), drag the region picker onto an edge to compare the Lanczos3 pane with the browser's own scaler, then download. Lanczos3 keeps edges cleaner than fast bilinear scaling, but no resampler adds detail: at 2× each captured pixel covers four output pixels, so 75% of the result is interpolated; at 4×, about 94%.
Some blur can be avoided and some cannot. The avoidable kind comes from a poor scaling filter, which smears edges that the original held cleanly. The unavoidable kind is already in the file: a small image holds a fixed number of measured pixels, and making it bigger spreads them over more space. A good enlargement deals with the first and is honest about the second.
Two terms
Image resampling is computing new pixels from the ones around them when an image changes size. A resampler redistributes the information that is already there. It cannot add any, which is the difference between resampling and the neural super-resolution that the word “upscaler” now suggests to most people.
Lanczos3 is a resampling filter that weighs a wide window of source pixels for each new pixel, using a windowed sinc function. It holds edge contrast that a narrower filter such as bilinear averages away. Its known side effect is a faint halo that can appear beside a very hard edge.
Enlarging an image, step by step
- Open the image enlarger and press Choose an image, or drop or paste one anywhere on the page. PNG, JPEG, WebP, GIF and AVIF all open; an iPhone HEIC usually needs converting first.
- Under Enlarge by, pick 1.5×, 2×, 3× or 4×, or open More options and type a pixel width in Target width. The two stay in step, and neither will go past 4×. The size under the factors shows the output size, the source size and the megapixel count.
- Read the line under that size. It says how many output pixels each captured pixel is covering and what share of the result is interpolated; Result repeats it as a percentage.
- In Pick the region, drag the rectangle (or use the arrow keys; hold Shift for bigger steps) onto an edge: lettering, a horizon, a wire. The two panes show that patch at one output pixel per screen pixel, Lanczos3 on the left and the browser’s own
drawImageon the right. - Under More options, Save as, choose Smallest, PNG, JPEG or WebP. Smallest tries WebP, then JPEG, then PNG, and keeps whichever your browser wrote smallest; WebP is listed only where the browser can write it. For an image with transparent areas, pick PNG or WebP, because the JPEG option flattens anything see-through onto white.
- Press Download the enlargement (or Download on the bar at the foot of the screen). It saves the whole image, not the patch in the panes, under a name such as photo@2x.webp, and then shows the file’s size and format under Result.
How much of an enlargement was captured
Every enlargement is mostly interpolation, and the share climbs quickly. At a factor f, each captured pixel covers f² output pixels, so the interpolated share is 1 − 1/f².
| Factor | Output pixels per captured pixel | Share interpolated | Offered by the tool |
|---|---|---|---|
| 1.5× | 2.25 | 56% | Yes |
| 2× | 4 | 75% | Yes |
| 3× | 9 | 89% | Yes |
| 4× | 16 | 94% | Yes |
| 8× | 64 | 98% | No |
| 16× | 256 | 99.6% | No |
That is why the presets stop at 4×. Past it, a single measured pixel is being asked to become 64 or 256, and the result is a large blurred version of a small image. As a working guide, 2× is usually indistinguishable at normal viewing distance, 3× is acceptable for print seen at arm’s length, and 4× starts to look soft on fine texture. A 200-pixel image holds 200 pixels of detail at every size you display it.
The canvas ceiling that turns 2× into 1.18×
The limit people meet first is not the filter. A browser canvas is capped near 8,192 pixels a side and, in some browsers, about 16 megapixels in total, and past the cap it returns a blank image instead of an error. The tool holds every browser to both limits, 8,192 pixels a side and 16,777,216 pixels in total (4,096 × 4,096), before it draws anything, scales the output down to fit, and says so in a warning under Result.
Take a 12-megapixel photo, 4000 × 3000. At 2× it asks for 8000 × 6000, which is 48 megapixels, almost three times the area cap. The tool produces 4729 × 3547 instead: an effective 1.18×. Every other preset gives that same file too: 1.5×, 3× and 4× all overshoot the cap on that photo as well, and each is scaled back to the largest size of that shape that fits.
The arithmetic gives the useful rule. A square image can be doubled up to 2,048 pixels a side, since 4,096 × 4,096 is exactly the cap, and quadrupled up to 1,024. The tool suits icons, screenshots, small scans and thumbnails. A photograph straight from a phone is usually larger than anything it can make.
The right-hand pane is the browser at its best
Comparing Lanczos3 with the browser’s lowest-quality setting would be rigging the test, so the right-hand pane uses drawImage with imageSmoothingQuality set to 'high'. The tool’s source notes that this gives a Lanczos-like filter in Chrome and Firefox and bicubic in Safari, and that a page has no way to ask which one it got.
So on some images the two panes look the same, and that is a real result. Flat areas look identical under every resampler; edges are where any difference shows, which is why the region picker asks you to aim at one. Where you cannot see a difference, take the smaller file. The case for a named filter is that you know what was done to your image, in every browser.
The panes are drawn at one output pixel per screen pixel for a reason that applies to any comparison you make yourself. A 4× enlargement fitted into a small preview is scaled back down by the browser, which hides the difference you are trying to judge. Look at the downloaded file at 100% before deciding it is soft.
Other ways to enlarge an image
On macOS, Preview’s Tools → Adjust Size resizes an image. This guide makes no claim about which filter it uses.
On Windows, the built-in Photos app crops and rotates images, but this guide has no checked built-in method for enlarging one. It has no checked command-line method either, so it does not offer one.
Neural upscalers are a different operation. A trained model generates new pixels that it predicts belong in the picture, rather than redistributing the ones that were captured. This guide makes no claim about how well any of them do that. This tool does not include one because it could not be served: the WebGPU build of the runtime measured 27,648 KB, over the 25 MiB per-file ceiling of this site’s host, and the model weights compress by only about 7%. The resampler it uses instead is 14 KB.
| Image enlarger | macOS Preview, Adjust Size | A neural upscaler | |
|---|---|---|---|
| Method | Lanczos3 resampling | Not stated here | A trained model generates pixels |
| Adds detail that was not captured | No | No | It generates new detail |
| Shows the result beside an alternative | Yes, against the browser’s scaler | No | Not covered here |
| Largest factor | 4× | Not stated here | Not covered here |
| Your image is sent anywhere | No | No | Depends on the service |
Checking that the image stayed on your machine
Load the page and enlarge one image so that everything it needs has arrived. Then disconnect from the network and enlarge a second. If the panes redraw and the download completes offline, nothing could have been sent. The Network tab of the developer tools tells the same story with the connection on: the page’s own code, and no request carrying your picture.
The image enlarger is free. To crop or rotate before enlarging, use the image editor, and to choose between PNG and WebP for the result, how much PNG to WebP saves, measured on eleven images has the figures.