Turn text locked in a picture back into text you can copy
The moment you take a screenshot or a photo, the sentences in it stop being text and become nothing more than colored dots. You can read them just fine, but the computer cannot select or copy them. This tool looks for letter shapes in an image and converts them back into characters. That job is usually called OCR, short for optical character recognition.
OCR output is not a faithful copy of the original. It is the engine's best guess. So instead of simply showing the recognized text, this tool paints the engine's confidence for each word over the image, and whenever you step to a doubtful word it enlarges the original of that line so you can compare it with the result side by side. Everything is processed inside this browser, and your image is never sent anywhere.
When is this useful?
Retyping text looks quick, but it invites mistakes, especially when numbers or email addresses are involved. Text trapped in an image comes up more often than you might expect.
- Notices and flyers sent as images in a chat app: copy dates, places and account numbers straight into your calendar or notes.
- Slides and video-call screenshots: paste a sentence that flashed on screen into your notes and fix only what needs fixing.
- Error message screenshots: copy the wording from a screenshot someone sent you to search for it or paste it into a support request.
- Photos of books and printed pages: copy the passage you want to quote, then check it against the page along with the page number.
- Web images with text you cannot select: pull out the sentences from a social card or a table posted as a picture, or turn them into text a screen reader can read.
Phones and computers already include similar features. If yours has one, that is the fastest route. This tool is a good fit where the built-in feature cannot reach, and for jobs where you need to check the result carefully.
| Item | iPhone Live Text | Windows 11 Snipping Tool | This tool |
|---|---|---|---|
| Where it works | iPhone XS and XR or later, iOS 15 or later | Screens captured with Snipping Tool | Any device with a browser, saved images and pasted screenshots |
| Where it runs | On the device | On the device (per Microsoft) | Inside this browser |
| Checking results | Select text and copy it | Copy the text | Per-word confidence, the current line's original for comparison, re-reading a selected area |
How to use it
- Capture the screen and paste it here with Ctrl+V (⌘+V on Mac), drop an image onto the page, or click Choose image. On Windows, Win+Shift+S copies a part of the screen straight to the clipboard; on a Mac, use ⌘+Shift+Control+4.
- Check that the recognition language chips match the text in the image. Only English is selected at first, and you can pick up to three languages.
- Use the arrows under the result box to step through the words to check. The original of that line appears enlarged in the strip above, so compare it and fix any wrong letters right in the result box.
- If text you do not need was read as well, use Select area to draw a box on the image and read only that part again. If the text is lying on its side, press a rotate button.
- Copy everything or save it as TXT. If the text is going into a document, switch line handling to "Join into paragraphs".
Find wrong letters with confidence and the original line
For every word, the recognition engine returns a score from 0 to 100 for how likely that word is to be right. This tool paints the word boxes on the image in three styles according to that score. If you look at the low scores first, you do not have to compare the whole result from start to finish.
| Confidence | Marking | How to read it |
|---|---|---|
| 80 or higher | Light blue box | Mostly right. But look-alike characters such as 1 and l, or 0 and O, can be wrong even with a high score. |
| 60 to 79 | Dark blue box | If it is a number, a date or a name, check it by eye once. |
| Below 60 | Orange dashed box, "word to check" | Step through with the arrows and compare with the original line. A word you fix no longer counts as a word to check. |
The sample result above is a good illustration. It was produced by really reading the sample image with this tool's engine. No word scored below 60, so there are zero words to check, yet the engine still got a few things wrong. The reading missed the period at the end of the last sentence, and it turned both middle dots (·) into hyphens (-) with scores of 82 and 87, which are light blue boxes.
| Original | Recognized as | Confidence | Marking |
|---|---|---|---|
| · (middle dot) | - | 82 | Light blue box |
| · (middle dot) | - | 87 | Light blue box |
As this shows, a high score is no guarantee. Before you submit the result, or use it for a payment or a booking, compare numbers, dates, account numbers and names with the original once more. When you move the cursor in the result box, the original of the line holding that word appears in the strip above and its box on the image is highlighted too, so there is no need to hunt for words one at a time. In the other direction, clicking a word box on the image selects that word in the result box.
Small text is enlarged and read once more
When letter strokes are only a few pixels wide, OCR cannot tell similar shapes apart. The Tesseract documentation says the engine works best on images of at least 300 dpi, so resizing the image can help. A screenshot has no meaningful dpi value, so this tool instead measures the median height of the text lines in the first reading.
If that value is below 30 pixels, the image is enlarged until lines are 44 pixels high and read once more. The enlargement is at most 3×, stays within 16 million pixels, and is skipped when it would be less than 1.25×. Of the two results, the one with the higher average confidence, weighted by character count, is used. If the first reading finds no text lines at all, it tries once more at 2×. The "Text line height" gauge shows this process.
| Median line height | Image | Scale | Why |
|---|---|---|---|
| 12px | 1,200 × 660 screenshot | 3 | 44 ÷ 12 = 3.67, but capped at 3× |
| 20px | 1,200 × 660 screenshot | 2.2 | 44 ÷ 20 |
| 24px | 1,200 × 660 (sample) | 1.83 | 44 ÷ 24 |
| 32px | 1,200 × 660 screenshot | 1 | 30px or more, so left as is |
| 14px | 1,080 × 2,400 phone screenshot | 2.45 | 16 million pixel limit |
| 20px | 4,000 × 3,000 photo | 1 | The scale allowed by the limit is 1.15, so it is not enlarged |
As in the last row, small text inside a large photo leaves no room to enlarge the whole image. If you select just the text as an area, only that part is processed, so it can be enlarged much more within the same limit. Photos larger than 16 million pixels are first scaled down to 16 million pixels, though, so the selected part is cut from that smaller copy before it is enlarged. Text that is already blurry does not gain strokes by being enlarged, so it is better to take the photo again from closer.
Dark screens, margins and tilted photos
Engines from Tesseract 4 on expect dark text on a light background. If the average brightness of the range being read is below 0.45 (white = 1), this tool treats it as a dark mode screenshot and inverts the colors before reading. A transparent PNG is placed on a white background and read that way.
The Tesseract documentation warns that problems can occur when the text area has no border and recommends a margin of about 10 pixels. In screenshots the text often touches the edge, so before reading, this tool adds a 12 pixel margin on all four sides, filled with the average color of the image edge. When text lines are badly tilted, line-splitting accuracy drops a lot, so for a photo that lies on its side, use the rotate button to bring the lines upright before reading.
With a big bold headline, the engine sometimes reads the top part of the letters as a separate line and produces a line of meaningless symbols. This tool drops a line from the result when every word in it scores below 60 and it overlaps at least half of a more reliable line vertically.
Choosing recognition languages
Choose recognition languages to match the kind of text in the image. Each language has its own training data, which is downloaded the first time you pick it, and the more languages you select together, the longer reading takes. That is why you can pick at most three at a time.
| Language | Data | Pick it when |
|---|---|---|
| Korean | 1.6 MB | Notices, documents and app screens that are mostly Korean. Add English if the two are mixed |
| English | 3.0 MB | English documents, and screens full of email addresses or product names |
| 日本語 | 2.0 MB | Horizontal Japanese. Spaces between kanji and kana are removed when lines are joined |
| Español | 2.1 MB | Spanish text with accented letters such as ñ and á |
| Indonesia | 1.2 MB | Indonesian notices and receipts |
If stray Latin letters creep into an image that has only Korean, turn off English and leave Korean alone. In the other direction, for an image with only English text, keeping just English makes letter recognition steadier. When you change the language, the same image is read again right away with the new setting. The data is a version of Tesseract's most accurate training data (tessdata_best) reduced to integers, the same data Tesseract.js uses by default.
Keep lines or join into paragraphs
Keep lines leaves the line breaks exactly as they appear in the image. It suits text where the line itself matters, such as an address, a table row or a list. Join into paragraphs glues together lines that were broken only by the width of the screen, so the text pastes nicely into a document or an email. Neither mode reads the image again; they only rearrange the result.
- A single blank line is placed between paragraphs.
- Lines that start with a marker such as •, -, ※, 1., ① or a Korean list marker are treated as list items and begin on a new line.
- Latin-script lines are joined with a single space, and where kanji or kana meet, they are joined with no space.
- If an English word was split with a hyphen at the end of a line and the next line starts with a lowercase letter, the lines are joined and the hyphen is kept.
If you edit text in the result box and then change line handling, your edits go back to the text as first recognized. In that case, click "Restore my edits" in the status line to return to the text from before the change.
Common mistakes
| Symptom | Common cause | What to try |
|---|---|---|
| The result is empty or only symbols | The text is too small or blurry, or its color is close to the background | Select just the text as an area, or capture it again more sharply |
| Wrong letters from another script appear | A language you do not need is turned on | Turn off the extra language and keep only the one you need |
| Text from buttons and icons shows up between lines | The whole image was read | Use Select area and read only the main text |
| The line order is mixed up in a two-column layout | The engine read the columns as one | Select the left column, then the right column, as separate areas |
| Numbers or symbols change into something else | Look-alike shapes: 0 and O, 1 and l, a middle dot and a hyphen | Compare the words to check and the numbers in dark blue boxes with the original line |
| Almost nothing is readable | The photo is on its side, or the text is vertical | Stand it upright with the rotate button (vertical writing is not supported) |
Limits
- Handwriting: the Tesseract.js FAQ says handwriting recognition does not improve much with any combination of settings, because the engine is built for printed text.
- Vertical writing: no training data for vertical writing is included. Accuracy drops sharply for vertical Japanese or Korean.
- Tables: text in cells is read, but the rows and columns of the table are not preserved. For a table with many cells, it is better to select and read one column at a time.
- Decorative fonts and text over patterns: if the letter shapes differ a lot from the fonts the engine learned, or blend with a background pattern, mistakes increase.
- Formulas and special symbols: layouts such as fractions, superscripts and chemical formulas get flattened into a single line and lose their structure.
- One image at a time: read and copy images one by one. For a document that is already a PDF, a tool that pulls text straight out of PDFs is more accurate.
Your image is not sent anywhere
Screenshots easily contain sensitive details such as names, contact information and account numbers. This tool runs the Tesseract.js engine in a worker inside your browser, so the image you choose or paste and the text it reads are never sent to a server, and they are not stored or put in the address bar. What it downloads from the internet is only the recognition engine and the data for the languages you pick, once at the start, plus a converter that is used when the browser cannot open a HEIC photo itself. All of it comes from this site.
Language data is kept in the browser's storage (IndexedDB) so it does not have to be downloaded again on your next visit. When you press Clear, the image, the result and the selected area disappear from the screen, and nothing remains after you close the tab. On a shared computer, the text you copied may still be on the clipboard, so it is safer to copy some other text once when you are finished.
Basis: engine Tesseract.js 7.0.0 (released 2025-12-15, LSTM), language data 4.0.0_best_int from @tesseract.js-data 1.0.0. Download sizes are 4,073,740 bytes for the engine, 1,572,336 for Korean, 2,952,873 for English, 2,030,256 for Japanese, 2,100,190 for Spanish and 1,194,182 for Indonesian. Checked 2026-10-20.
Sources
- 01Tesseract docs: Improving the quality of the outputWorks best at 300 dpi or more, 4.x expects dark text on a light background, margins (for example 10px), skew, page segmentation
- 02Tesseract docs: Traineddata Filestessdata_best gives up a lot of speed for a little more accuracy; comparison with tessdata_fast
- 03Tesseract.jsJavaScript OCR for more than 100 languages, runs in the browser and Node.js, Apache-2.0
- 04Tesseract.js FAQoem 1 data is tessdata_best reduced to integers, language files are stored in IndexedDB, handwriting does not improve much with settings
- 05Tesseract.js v7.0.0 releaseReleased 2025-12-15
- 06jsDelivr: @tesseract.js-datakor, eng, jpn, spa and ind 1.0.0, traineddata.gz in the 4.0.0_best_int folder
- 07Apple Support: Use Live Text on iPhoneiPhone XS and XR or later, iOS 15 or later
- 08Apple: iOS feature availabilityLive Text languages include English, Japanese, Korean and Spanish
- 09Microsoft Support: Use Snipping Tool to capture screenshotsText actions (OCR); text recognition is processed on the device
- 10heic2anyConverter used when the browser cannot open HEIC directly, MIT, version 0.0.4
Frequently asked questions
What kinds of images can it read?
It accepts PNG, JPG, WebP, BMP, GIF (the first frame of an animated GIF), HEIC and AVIF images, one at a time, up to 20 MiB and 40 million pixels. Clear printed text, such as in a screenshot, reads best; handwriting, vertical writing and decorative fonts are much less accurate. PDFs are not accepted, so for a PDF that contains text, use a tool that pulls text straight out of PDFs.
Are my images or the text they contain sent to a server?
No. The recognition engine runs inside this browser, so the image and the result never leave your device, and they are not stored or put in the address bar. What is downloaded from the internet is only the recognition engine and language data, once at the start, plus a converter needed to open HEIC photos.
Why does the first read take so long?
The first time, the recognition engine (about 4.1 MB) and the data for the language you picked are downloaded from this site. With the default English only, that is about 7.0 MB in all. The language data stays in your browser's storage, so preparation is shorter from then on, and the time spent actually reading depends on your device, the image size and the amount of text.
What are orange boxes and "words to check"?
For every word, the engine returns a score from 0 to 100 for how likely it is to be right. Words scoring below 60 are painted as orange dashed boxes on the image and counted as words to check. Press the arrows and that word is selected in the result box while the original of its line appears enlarged in the strip above, so you can compare the two and fix it right away. Even with a high score, look-alike characters such as 1 and l, or 0 and O, can be wrong.
The result has strange letters or symbols mixed in.
First check that the recognition language matches the text in the image. For an image with only English text, keeping just English reduces stray letters from other scripts. If icons, buttons or background patterns were read as well, use Select area to read only the part you need, and if the text is tilted or on its side, stand it upright with the rotate button before reading again.
Can it read screenshots with small text?
If the median text line height is below 30 pixels, the image is enlarged up to 3× so that lines are 44 pixels high, and read once more. For small text inside a large photo, select just that part as an area. Only the selected part is processed, so it can be enlarged more within the same pixel limit. Text that is already blurry does not gain strokes by being enlarged, so taking it again is better.
Can I read several images at once?
It reads one image at a time. If you choose several, only the first is read, so read one, copy it or save it as TXT, and then add the next. If a multi-page document is already a PDF, do not turn it into images; a tool that pulls text straight out of PDFs is faster and more accurate.
How is it different from the text recognition built into my phone?
iPhone XS and XR or later with iOS 15 or later have Live Text, which lets you select text in a photo directly. This tool also works on screenshots saved on a computer or downloaded images, and it shows the confidence of each word so you can check doubtful spots against the original line. On a phone you can use it the same way by choosing an image from your photo library.