To get text out of an image without uploading it: drop the PNG, JPG, or WebP below, choose the language, and press Recognize. The open-source Tesseract engine — compiled to WebAssembly — reads the image on your machine and hands you selectable, copyable text in a few seconds. A 1920×1080 screenshot processes in roughly a heartbeat; a 12-megapixel photo takes longer. Nothing is uploaded: the only download is the engine itself (2.7 MB of WebAssembly plus your language model, 1.9 MB for fast English), cached after first use.

Images

🖼️

Click or drag images here — PNG, JPG, WebP, BMP (multiple allowed)

Recognition settings

Add at least one image to begin.
Advertisement

Language Model Download Sizes

LanguageCodeFast modelStandard model
Englisheng1.9 MB10.4 MB
Spanishspa1.1 MB8.0 MB
Germandeu0.8 MB6.8 MB
Frenchfra0.6 MB6.0 MB
Italianita1.2 MB6.6 MB
Portuguesepor1.0 MB6.4 MB
Dutchnld2.9 MB9.7 MB
Russianrus1.5 MB8.2 MB
Chinese (Simplified)chi_sim1.6 MB19.2 MB
Japanesejpn1.5 MB15.4 MB
Koreankor1.1 MB6.6 MB
Arabicara0.7 MB1.6 MB
Hindihin0.9 MB1.3 MB

Sizes are the compressed .traineddata.gz files the tool fetches once from the Tessdata CDN, then your browser caches them. Over 100 languages are available — the dropdown lists the twenty most requested. The engine core itself (LSTM WebAssembly) is 2.7 MB, downloaded once regardless of language.

What Images OCR Well

Image typeTypical sizeExpected result
Screenshot (UI, code, chat)1200×900 = 1.08M pxNear-perfect — flat, sharp, straight
300 DPI document scan2550×3300 = 8.4M pxExcellent; proofread numbers
Phone photo, page filling frame4000×3000 = 12M pxGood with preprocessing; watch skew
Phone photo at an anglevariesFair — straighten and re-shoot
Small crop of a few words< 50px text heightPoor — text is too small to segment
HandwritinganyUnreliable — engine is trained on print

The pattern: OCR rewards flat, straight, evenly lit, adequately sized text. The two failure levers you control are resolution (text needs roughly 20 pixels of x-height — the height of a lowercase letter — for reliable segmentation) and contrast.

How Image OCR Works

Optical character recognition looks at the pixels of an image and works out which characters they form. This tool decodes your image to a canvas in the browser, optionally converts it to high-contrast grayscale, then hands the pixels to Tesseract — the OCR engine maintained as open source since the 1990s — running as WebAssembly in a worker thread. The engine segments the page into blocks, lines, and words, matches candidate shapes against a trained language model, and uses language context to fix ambiguous characters (that's how it tells "rn" from "m").

The arithmetic of an image

Everything in image OCR scales with pixel count. A 1920×1080 screenshot is 2,073,600 pixels, which is 8,294,400 bytes decoded as an RGBA buffer; a 4000×3000 photo is 12,000,000 pixels, about 5.8× more work. A 300 DPI scan of a US Letter page renders to 2550×3300 = 8,415,000 pixels — which is why "scan at 300 DPI" is the standing advice for documents and why a big photo takes visibly longer than a screenshot. Downscaling a huge photo to where the text is still crisp often runs faster and reads better.

A worked example

Receipt photo, English, fast model. The engine downloads once: 2.7 MB of WebAssembly plus the 1.9 MB fast English model — about 4.6 MB total on a cold cache, a few seconds on typical broadband, and nothing on every later visit. The 3024×4032 phone photo (12.2M pixels) is decoded, grayscaled, and contrast-stretched in the preprocessor, then recognized in a background worker; on a typical laptop that's several seconds, longer than a screenshot but far shorter than retyping the receipt. Out comes plain text — item lines, prices, totals — with the standing caveat that digits are exactly where OCR misreads, so totals get proofread.

When this is the wrong tool

Frequently Asked Questions

How do I extract text from an image for free?

Drop the image into the tool above, pick the language, and press Recognize. The text appears in seconds, ready to copy or download as .txt. It runs on the open-source Tesseract engine compiled for the browser, so there is no page limit, no account, and no upload — the image never leaves your machine.

Is my image uploaded anywhere?

No. The image is decoded by your browser and read by Tesseract running as WebAssembly in a worker thread on your device. The only network traffic is the one-time engine download from a CDN (about 2.7 MB of WebAssembly plus your language model), which the browser then caches. Your image's pixels and the recognized text stay in the tab.

Which languages does image OCR support?

Over 100. English, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (simplified and traditional), Japanese, Korean, Arabic, Hindi, and dozens more each have a trained model. You can load multiple languages at once for mixed-language images, at the cost of downloading each model.

Why is OCR less accurate on photos than scans?

Cameras add what scanners don't: perspective skew, uneven lighting, shadows, lens blur, and background clutter. OCR engines segment characters best from flat, evenly lit, straight-on text — which is exactly what a 300 DPI scan gives and a phone photo approximates. Straighten the page, fill the frame, avoid shadows across the text, and enable the grayscale-contrast preprocessor for phone photos.

Can OCR read handwriting?

Not reliably. Tesseract is trained on printed type, so neat handwriting sometimes comes through partially and everyday cursive mostly doesn't. If you have handwriting at scale, you need models trained for it (or a human transcriber). For printed text — receipts, forms, screenshots, signs, book pages — image OCR is the right tool.

What is the difference between fast and standard models?

Both are the same Tesseract engine; they differ in model size and accuracy. The fast variant of English is 1.9 MB and trades a little accuracy for speed; the standard model is 10.4 MB and the most accurate. Start with fast — if a clean image still misreads, re-run with standard. Both are cached after the first download.

Advertisement