JPG to Text — Free, Fast & Private
JPG is the format a camera hands you, which makes it the format most people are holding when they need words out of a picture. A page of a contract photographed on a desk. The opening hours screwed to a shop door. A paragraph from a library book you cannot check out. A printed form somebody filled in and shot with a phone before emailing it on. All JPEG, all containing text that is perfectly readable to you and completely inert to your computer. This page runs a recognition engine — a self-hosted build of Tesseract 7, compiled to WebAssembly — inside the browser tab you are reading. The engine and a roughly 1.9 MB English language model come down from this site on first use and then sit in your browser cache. Nothing about the picture travels outward: there is no upload step to fail, no queue to sit in, and no server-side copy of your document to worry about later.
What JPEG compression does to letterforms
JPEG is lossy by design, and the way it throws information away happens to collide with the one thing character recognition cares about most. The encoder chops the picture into 8×8 pixel blocks and describes each block as a sum of frequency patterns, then discards the high-frequency components it judges least visible. High frequency means sharp transitions. A letter is nothing but sharp transitions: black stroke, white paper, black stroke. Push the quality slider down and you get faint ripples spreading outward from every stem and serif, an artefact engineers call ringing and photographers call mosquito noise. To your eye that is a slightly soft-looking word. To a recogniser that is trying to decide whether a shape is an e or a c, it is contamination sitting exactly where the distinguishing detail lives. There is a second effect too: most JPEG encoders store colour at half resolution, so coloured text on a coloured background loses edge definition before the compression even starts.
The practical upshot is simple. A 4 MB JPG straight off the camera almost always reads better than the 180 KB version of the same shot that came back through a messaging app, even though both look fine on a phone screen. If you have any choice at all about which copy of a file to feed in, feed in the biggest one.
Re-saved JPGs are the hard case
Every time a JPEG is opened and saved again it is re-compressed, and the losses stack. The artefacts from the first pass become the input to the second pass, which faithfully preserves them and adds its own. A photo that has been through a group chat, downloaded, cropped in a phone gallery, and forwarded again has been re-encoded three or four times, and the text in it has been quietly smeared each round. This is why the same document sometimes reads flawlessly for one person and comes back as gibberish for another: they are not looking at the same file. If the recognition on a forwarded picture disappoints, the fix is almost never a different tool. It is asking whoever took the shot to send the original, ideally as a file attachment rather than an inline image, since inline sharing is where the aggressive re-encoding usually happens.
Shoot flat, shoot bright
Since you usually control the capture, control it well. Lay the page on a flat surface rather than holding it, and stand over it so the camera looks straight down; a tilted shot turns rectangles into trapezoids and pushes the far lines of text out of focus at the same time. Get light onto the paper from the side or from a window rather than from directly behind you, because head-on light bounces straight back off any coated stock and burns out a stripe of the page. Watch for your own silhouette falling across the sheet, which is the single most common way a phone photo of a document goes wrong indoors. Fill the frame: the page should occupy nearly the whole image, since every pixel spent on your desk is a pixel not spent on a letter. Tap to focus on the text itself, not on the middle of the page, and wait the half second it takes the lens to settle before pressing the button. Thirty seconds of care here buys more accuracy than any amount of post-processing.
Signs, book pages, and forms behave differently
Not all JPG text is the same problem. A shop sign or a notice board is usually large, high-contrast type shot from a distance, and it reads well provided you got close enough that the letters are not just a few pixels tall; if the words come back as fragments, walk nearer and shoot again rather than cropping and enlarging, because enlarging invents no new detail. A book page is the awkward one, because paper curves into the spine and the inner column of text bends away from the lens, losing both focus and geometry. Press the book flat, or photograph one page at a time with the spine at the edge of the frame instead of the middle. A printed form is the easiest input on paper and the most valuable to get right, since forms are dense with reference numbers and dates where a single wrong character matters. If the form has been filled in by hand, expect the printed labels to come through and the handwritten answers not to.
What you get back, and what you do not
The output is plain text with a confidence figure attached. Plain means plain: the paragraph breaks survive, the two-column layout does not, and a table arrives as a run of values in reading order rather than as rows you can paste into a spreadsheet. Bold, italics, headings, and colour are all discarded, because the engine reports characters rather than styling. That is the right shape of output for the jobs people actually bring here — quoting a paragraph, searching for a phrase, moving an address into a form, pulling a serial number off a label — and the wrong shape if you were hoping for a faithful reproduction of the original page. The engine is also trained on printed and rendered type, so it is at home with anything that came out of a printer and out of its depth on handwriting. And version one recognises English only; the model file that ships is eng.traineddata, and more languages are coming rather than being quietly implied. Text in another language will still produce output, which is exactly why the limitation is worth stating plainly instead of letting you discover it in a garbled result.
What to do with the JPG afterwards
Once the words are extracted, the picture usually still has a job to do — filing, emailing, attaching to a claim. That is a good moment to shrink it, because the legibility you were protecting is no longer load-bearing; the JPEG compressor will take a camera-sized file down to something an email will accept. If the shot came in sideways because the phone guessed the orientation wrong, rotate it upright before recognition rather than after, since a 90-degree turn is the one geometry problem the engine cannot reason its way out of. And if the page needs to end up as a document rather than a picture, bundling the photos into a PDF is usually what the other end actually wanted.
