Remove text from image: what the patch leaves behind is the whole question
Short answer: by the time you have an image there are no characters left to remove — there are pixels, and the pixels the text occupied have to be replaced with something that passes for the background that was behind it. So the question is not whether the text is gone, it is whether the patch shows. Measured in Chromium 153, that is one number: the deepest difference the patch still has against the background around it. Over a 228 × 46 box on a background that varies by 5, filling it with one sampled colour leaves 5, blurring it in place leaves 130 and interpolating across it leaves 2. The threshold that decides whether that matters is not fixed either — it is the background's own variation, and the same measurement in the other direction says whether text is in the picture at all: a glyph is still fully recoverable at a contrast of 1/255, the smallest an 8-bit image can hold, and it needs one more than twice the background's variation before the whole of it clears.
Pick a sample or load a picture, then drag a box over the text in it.
One number, both directions
Text in an image and the removal of text from an image are the same question asked twice, and both times it is asked in pixels. To know whether there is text in a region you ask how far the pixels in that region sit from the background. To know whether a removal worked you ask how far the pixels that replaced them sit from the background. It is one measurement taken before and after, and the only thing that changes is which side of the threshold you want to be on: above it, and the text is there; below it, and the patch is invisible.
That is why the two halves of this page belong together, and why a number is worth having at all. The word the tooling around this uses for the second half is seamless, and the eight tool pages that rank for this term carry no measurement of it between them — not in their titles and not in their descriptions. So the rest of this page is the number, in both directions, and what moves it.
Text is still fully there at 1/255
Start with the direction that surprises people. An 8-bit image cannot express a difference smaller
than 1, so 1 is the floor: text drawn one step away from the background is as invisible as text in an
image can be. It is not, however, absent. Measured in Chromium 153 on a 480 × 220 canvas, with
Sample text at 600 40px Arial on a flat background of 240 and a 228 × 46 box
around it, the glyph occupies 2,745 pixels at full contrast, and it occupies
the same 2,745 pixels at a difference of 1. Scaling the difference back up by 255
recovers 100 per cent of them, at every contrast on the way down.
| Contrast the text is drawn at | Deepest difference in the render | Glyph pixels present | Recovered by scaling the difference up |
|---|---|---|---|
| 1/255 | 1 | 2,745 of 2,745 | 100% |
| 2/255 | 2 | 2,745 of 2,745 | 100% |
| 4/255 | 4 | 2,745 of 2,745 | 100% |
| 16/255 | 16 | 2,745 of 2,745 | 100% |
| 64/255 | 64 | 2,745 of 2,745 | 100% |
| full (text at 0) | 240 | 2,745 of 2,745 | 100% |
The row worth stopping on is the first. There is no contrast at which the glyph thins out or loses its faintest edges, because the anti-aliasing that softens an edge is itself a difference, and at a difference of 1 the softness survives as a difference of 1. What the floor costs you is not information, it is the ability to notice: nothing on a screen shows a step of 1 as anything other than the same colour. So a picture can carry text that no one looking at it can see, and the file holds all of it.
The threshold is twice the background's own variation
Which raises the obvious follow-up: if 1 is enough, why is text ever unrecoverable? Because a real background is not one value. It is a field that varies, and a glyph only stands out from it while it differs from it by more than the field differs from itself. Measured over six noise amplitudes, with the same 2,745-pixel glyph, the smallest contrast at which every pixel of the glyph clears the background is one more than twice the background's own maximum deviation:
| Background's own variation | Smallest recoverable contrast | Same glyph recoverable? |
|---|---|---|
| 0 | 1 | 100% |
| 1 | 3 | 100% |
| 2 | 5 | 100% |
| 4 | 9 | 100% |
| 8 | 17 | 100% |
| 16 | 33 | 100% |
The factor of two is not slack in the measurement, and it is worth spelling out because it is the part that decides whether text survives in a picture. A glyph pixel is not painted onto a blank sheet: it replaces a background pixel, so what a reader can recover from it is the contrast plus whatever the background was already doing there. The glyph has to clear the background's own spread, and the worst pixel in the glyph is the one sitting on the lowest part of that spread, where the background is working against the contrast rather than with it. Measured at exactly twice the spread, 649 of the 2,745 pixels are still inside the background; one step higher and all of them are out.
The practical reading is that the same invisible text is plainly written on a flat fill and genuinely gone on a photograph, and that nothing about the text changed — only the picture it was written on. It also means the useful question is never “how faint can text be” but “how faint can it be and still beat this particular background”, which is a question about the picture rather than about the text.
What each way of removing it leaves behind
Now the other direction, and it is the same number. The three ordinary ways of clearing a region are to fill it with one colour sampled from nearby, to blur it in place, and to interpolate across it from the edges. Each was run over the same box of text on three backgrounds, and the result is the deepest difference between the patched region and the background that was actually behind the text — that is, what a viewer would see as the patch:
| How the region is cleared | Flat background (varies by 0) | Gradient (varies by 5) | Noisy (varies by 6) |
|---|---|---|---|
| One sampled colour | 0 | 5 | 6 |
| Blur in place | 126 | 130 | 131 |
| Interpolate from the edges | 0 | 2 | 12 |
Three things fall out of that table. The first is that blurring is not a removal at all: at 126 to 131 it leaves a difference larger than the text it was covering, so it replaces something you could read with something you can see. The second is that interpolating beats a flat fill on a background that varies in one direction and loses to it on one that varies in every direction — 2 against 5 on the gradient, 12 against 6 on the noise — because a straight line drawn across a noisy region is a smooth band, and a smooth band is exactly what noise is not. The third is that the flat fill lands on the background's own variation and stops there: 5 where the background varies by 5, 6 where it varies by 6, and 0 where it does not vary at all.
The connection to the previous section is what decides whether any of this shows. A patch of 6 is invisible on a background that varies by 16 and obvious on one that varies by 2, because visibility is a comparison rather than a value. That is why the same tool produces a clean result on one picture and a smear on the next, and why “seamless” is not a property a tool has. It is a property of a tool against a particular background, and the only way to know which you have is to measure the picture you are actually working on — which is what the box above does.
What this page does not tell you
How any particular tool works. Every number here was produced by this browser drawing into a canvas and reading the pixels back, and no service was queried. A tool that reconstructs a region from a learned model is not doing any of the three operations above and can beat all three of them; what it cannot do is change what counts as clean, because that is set by the picture it was handed.
The measurements are one string at one size and weight in one font stack, and the 2,745 pixels are a property of that string at that size, not a constant. The noisy background is uniform noise at a known amplitude rather than a photograph, which is structured; structure is what a reconstruction can exploit and uniform noise is the case where it has nothing to work with, so a photograph will generally land between the gradient column and the noisy one. The comparison between the three methods is the point of the table, and the exact figures will move with the text, the box and the background.
Measured 2026-10-09 and 2026-10-10 in Chromium 153 via Playwright, canvas 2D,
on a 480 × 220
canvas with Sample text at 600 40px Arial drawn at (40, 90) and a 228 × 46 box,
the same setup the tool above uses on its samples. Related:
the full list of invisible characters,
text that is hidden on a page rather than in a picture,
the four invisible characters that are real letters,
cleaning characters out of document text,
comparing two texts that look identical,
removing a watermark from a photo, and
stripping the invisible characters out of copied text.