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.
How much that costs depends on how many pixels each letter has to spare. In the measurements at the end of this page, a typed memo scaled down to 1,600 px and re-saved at JPEG quality 60 — about a seventh of the bytes — gave back every typed word, just as the full 3,400 px scan did: typewriter text at that size has detail to spare. Small print, a page shot from across a room, or a copy squeezed again and again has none to spare, and that is where the damage above starts costing characters. If you have any choice about which copy of a file to feed in, the biggest one is still the safe pick.
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.
JPG to text accuracy on real scans, measured
| File | Before | Words found | Character error rate | Time | Confidence shown |
|---|---|---|---|---|---|
| Typed memo, scanned (1958) | JPG · 3400 × 4401 px · 1.23 MB | 233 of 233 (100%) | 12.1% | 2.6 s | 82% |
| Same memo, downscaled and re-saved | JPG · 1236 × 1600 px · 171.5 KB | 233 of 233 (100%) | 9.0% | 1.6 s | 86% |
| Screenshot saved as JPG | JPG · 1280 × 800 px · 79.9 KB | 100 of 129 (77.5%) | 66.1% | 0.5 s | 69% |
Measured 2026-10-07 in Chromium 145.0.7632.6 by running this page’s tool on each file in a fresh tab (the engine and language-model load are inside the time) and comparing its text with a transcription typed from the image. Words found counts the transcription’s words that appear in the output; character error rate is the edit distance between the two texts over the transcription’s length, so handwriting, signatures and reading-order differences count against it. The photos and scans are CC0 or public-domain files from Wikimedia Commons; the screenshot is MiniPx's own; the re-saved memo is the same scan scaled to 1600 px tall and saved again at JPEG quality 60; the screenshot JPG is MiniPx's own screenshot saved at JPEG quality 85. Sizes are shown as the tool shows them (1 KB = 1,024 bytes).
The same on-device reader runs on extract text from image and photo to text.
