My mother wanted to enlarge an old group photo from the nineties and hang it on the wall. The scanning shop delivered the 150dpi option, only 526×750 pixels, and the print shop said a 6-inch print needs at least 1200 wide. My first reaction was that doubling it would do the job, but what came back was an even layer of mush, with faces like they were behind frosted glass.
Afterwards I tried enlargement again for a WeChat avatar, a spreadsheet screenshot and a set of old icons, and that is how I finally separated can be enlarged from can be seen clearly. The pixel counts and print sizes below are calculated from formulas, not estimated.
Enlarging does not add sharpness; it invents pixels that were never captured
A 526×750 image has 394500 pixels in total, all of them really captured by the scanner at the time, and that is all there is. Enlarging means filling in more cells, and the extra cells carry no new information; they can only be inferred from neighbouring known pixels. That is where the mush comes from: interpolation widens the transition band at edges, turning a one or two pixel jump into a gradient.
Also watch what doubling means: the factor refers to width and height, while area goes up by the square:
| Original | Factor | Output size | Total pixels | Area factor |
|---|---|---|---|---|
| 526×750 | 2x | 1052×1500 | 1,578,000 | 4x |
| 526×750 | 3x | 1578×2250 | 3,550,500 | 9x |
| 526×750 | 4x | 2104×3000 | 6,312,000 | 16x |
| 300×400 | 2x | 600×800 | 480,000 | 4x |
| 144×144 | 4x | 576×576 | 331,776 | 16x |
Working back from the target size is more useful than picking a factor. A 6-inch print is 102×152mm, which needs 1205×1795 pixels at 300dpi and only 602×898 at 150dpi; 7-inch (127×178mm) at 300dpi is 1500×2102; A4 (210×297mm) at 300dpi is 2480×3508. That 526×750 doubled is 1052×1500, which across 102×152mm comes to 262dpi horizontally and 251dpi vertically, slightly under the 300 the print shop quoted but far better than the original size. Pushing to 3x just to reach 300 is wasted effort; the extra nine times the area is all inferred.
Sharpening, noise reduction and local contrast: what each adds and what each costs
These three pull in conflicting directions, which is also why you cannot max out the factor and every switch at once.
Interpolation flattens the edges first. I use bicubic interpolation in gradual steps, enlarging stage by stage instead of jumping straight to the target, which keeps the transitions steadier, but the nature does not change: it still infers from the neighbourhood and cannot calculate the eyelash that was never in the original.
Sharpening is the countermove: an unsharp mask raises contrast on both sides of an edge so the mush looks crisp. The cost is specific: a bright halo appears outside the edge, most visible where a white shirt meets a dark sofa, and noise is high frequency too, so it gets amplified into speckles. So more sharpening is not better; I look at the background before the face.
Noise reduction works as a median filter pass beforehand, clearing isolated noise and compression artefacts before enlargement. That route saves dirty, not blurry: a median filter replaces a pixel with the neighbourhood median, so fine structures one or two pixels wide, such as strands of hair, eyelashes and fabric texture, get wiped out along with it. Denoise then enlarge is the right order; the other way round, the noise is smeared into patches and you can no longer tell texture from dirt.
Local contrast enhancement brings out detail in the shadows, but the same operation runs both ways: on an image that has been saved as JPEG repeatedly, the 8×8 block artefacts are local contrast too, and they show up as soon as you boost it. I learned that the hard way, so for any image that has been forwarded many times I check the blocking first and only then decide whether to touch the control.
One thing has to be clear: the exported PNG does not lose anything more to encoding, which is the file layer; enlargement itself adds no information, which is the pixel layer. How many times bigger it can get and how much you can actually see are not the same measure.
Portraits, text and line art enlarge completely differently
Portraits are mostly low-frequency area, skin, sky and clothing, with detail at the edges; after enlargement they mainly suffer from soft edges and white halos, and still look usable, because people skim naturally.
Text and line art are high frequency, with boundaries that only have two states. Interpolation turns boundaries into greyscale, and sharpening then draws a bright edge along every step, so the jaggies look harder than in the original. When I enlarged an old spreadsheet screenshot for recognition, the error rate was higher than with the small version; the problem sat at the stroke junctions that had been sharpened. Characters that differ by a single horizontal stroke picked up extra white edges, and those edges fooled the recogniser.
For icons and UI assets the easy answer is not to enlarge at all: if you can get the vector or the source file, re-export at the target size, and if you cannot, replace the asset. When I really do enlarge an old icon, I hold the factor to 2x and keep sharpening at minimum, preferring soft edges to a hard white ring; soft edges are ignored by the eye on a small screen, hard white edges are not.
The same goes for a 144×144 avatar. At 576×576 it has 330,000 pixels and fills the screen width, and the face is still the same face: the information in the features is whatever those twenty thousand original pixels held. For more clarity you have to go back to the original large file or reshoot.
My current process and those three switches
Decide the purpose first, then whether to touch it at all. Small images for the screen, WeChat avatars and list thumbnails, I mostly leave alone: the display size is what it is, and enlarging only makes the file bigger. Only printing needs real extra pixels.
If information can be captured again, capture it again first. With old photos I ask whether they can be rescanned: a 5-inch print (89×127mm) at 300dpi is 1051×1500, and at 600dpi it reaches 2102×3000. Those pixels were really captured, and they beat anything an algorithm infers.
Then three steps: check whether there is noise to clean up first; pick the factor from the target size you worked back to, starting at 2x rather than defaulting to maximum; and before export always run the drag comparison on two places, the subject edge and a flat background. If the background has picked up a layer of dirty patches, the sharpening and noise reduction are out of balance, and that is worth fixing before worrying about the subject looking soft.
Whenever the size does not need enhancing, I scale proportionally by percentage with Image Resizer, which does no extra processing. An enhanced image gets noticeably bigger: 1200×1600 uncompressed at four bytes per pixel is 7,500KB, about 7.3MB, and PNG compresses some of that away, but it still grows with area. To send it to someone, run Image Compressor separately rather than changing the format during enlargement. The actual Image Upscaler comes last for me, because what it supplies is inferred transitional pixels; what it can fix is an image being too small or edges being too soft, not information that was never captured.
Q: Does enlarging four times quadruple the resolution?
No. Width and height are each four times, so area and total pixels are sixteen times; fifteen of those sixteen parts are inferred from neighbours, and the captured information stays at the original single part.
Q: Why is the file so much bigger after enlarging?
Pixel count rises with the square. Uncompressed RGBA is four bytes per pixel, so 1200×1600 is 7,500KB, about 7.3MB; PNG compresses some of that away, but the trend still follows area. To control size, change the format or lower the quality, not the factor: the factor is a dimension question, size is an encoding question.
Q: Can all the noise be removed?
Not all of it. Noise reduction replaces the current value with a neighbourhood value, so isolated dirt disappears together with fine texture one or two pixels wide. I usually prefer to leave a little grain, because grain looks like a photograph and over-smoothing looks like a sticker.
Q: Is an old photo worth processing?
Depends on the use. For viewing on screen or a small keepsake, yes. For a larger print, I would first ask whether it can be rescanned or the original negative found, because that is real new information. Torn faces and scratches are a different job; factors and sharpening will not do it.
Q: Why is enlarged text harder to read than the small original?
Interpolation turns black and white boundaries into greyscale, then sharpening draws bright edges along the steps, and those bright edges eat into the gaps between strokes. For text I would rather re-typeset it or ask for the original file than use an enlarged screenshot.
Back to my mother's group photo. I chose 2x with minimal sharpening for a 6-inch print: just over 250dpi in practice, edges clearer than the original, no hard white halo, no patches in the background. To reach a full 300dpi I would have had to go to 3x, and the extra nine times the area would be inferred pixels that do not look any better. Later I asked the shop to rescan at 300dpi, and that 1051×1500 version is the one I actually wanted on the wall: inferred pixels add size, never the detail that was not captured back then.