JPG to Text

Read the words off a JPG photo of a page, a sign, or a printed form. Recognition happens inside this tab, on your own machine.

Drop a file
Drop an image or PDF to extract its text
JPEG, PNG, WebP, AVIF, HEIC, BMP, GIF, TIFF, PDF · English (more languages coming) · processed in your browser
PDF pages are rendered and read as images, up to 20 pages per run

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.

How it works

  1. Pick the largest copy of the JPG: Go for the original camera file rather than a forwarded or downloaded version. Every re-save smears the letter edges the engine reads.
  2. Drag it into the tool: Drop the .jpg or .jpeg above. Files up to 100 MB are accepted and decoding happens locally, so nothing is transmitted.
  3. Let the first run warm up: On a first visit the engine and the roughly 1.9 MB English model download from this site and are cached. Later runs start reading straight away.
  4. Read the confidence figure: It reflects how certain the engine was. A soft or shadowed photo pulls it down and tells you the result needs checking.
  5. Copy the text out and verify the numbers: Words that go wrong look wrong. Digits that go wrong look fine, so reread every amount, date, and reference against the photo.

Frequently asked questions

Does JPEG compression really change what the OCR reads?
Yes, measurably. JPEG discards high-frequency detail, and the boundary between ink and paper is high-frequency detail. Heavy compression leaves faint ripples around every stroke, which is where the engine looks to tell similar letters apart. A lightly compressed original and a heavily re-saved copy of the same page can produce noticeably different text.
I photographed a book and the inner column is fuzzy. Why?
The paper curves down into the spine, so that column sits at a different distance and a different angle from the rest of the page. It falls outside the depth of field and its baselines bend. Press the book flat against the table, or shoot each page separately with the spine along the edge of the frame rather than through the middle of it.
Should I compress the JPG before running recognition?
No. Compression is the enemy here. Feed in the biggest, least-processed version you have, get the text out, and compress afterwards if the file still needs to go somewhere. Shrinking first only removes the detail the engine was going to use.
Is a JPG that came through a messaging app good enough?
Sometimes, but it is the weakest input. Chat apps re-encode images aggressively and often downscale them as well, so a forwarded photo has lost detail twice over. If the result comes back scrambled, asking the sender to attach the original file usually fixes it more reliably than trying another tool.
Can it read handwriting in a JPG?
Not dependably, and it is better to say so. The recognition model was trained on typeset and printed characters. Careful block capitals occasionally come through; ordinary joined-up writing comes back as confident nonsense. On a filled-in form, expect the printed parts to work and the handwritten answers not to.
Is there a size limit on the file?
The tool accepts files up to 100 MB, which is far beyond any normal phone or camera JPG. Larger images take longer to process because there is simply more picture to analyse, and everything is running on your own processor rather than a rented one.
Does it work on JPGs in languages other than English?
Not yet. The shipped model is the English one, and each additional language is a separate multi-megabyte download that has to be cached on your device. More languages are coming. A stray non-English word inside an English document usually survives; a whole page in another script will not.
Does the JPG get uploaded while it is being read?
No. The engine is delivered to your browser and executed there, so the picture is decoded and analysed on your own hardware. Once the first visit has cached the engine and the model, you can disconnect from the network entirely and recognition still works, which is the plainest proof available.

All Image Tools

Solutions by use case