Why the images you pull out of a PDF come out blurry
There is a photograph in a PDF. You need it as a file — for a slide, a print job, a listing. You got it out somehow, opened it, and it is soft. Fuzzy edges, mushy text inside the picture, the sort of image nobody would sign off.
The natural conclusion is that the tool ruined it. Usually the tool did nothing of the sort. Either you captured the screen rather than the file, or the sharp version was thrown away when the PDF was made, months before you touched it.
The three causes look identical on screen and have completely different fixes, so the first job is telling them apart.
The three reasons, and how to tell which one you have
You captured the screen, not the file. Snipping tool, a screenshot, or Acrobat's "take a snapshot" all give you your monitor's pixels. At 100% zoom, an image drawn four inches wide on the page comes out around 380 pixels across, because that is roughly what four inches of your screen is. The file might be holding 2400 pixels of it. You never asked for those. This is the most common cause by a wide margin, and it is completely fixable.
The image was downsampled when the PDF was created. Every "reduce file size", "web quality" or "smallest size" export setting does the same two things: it scales photographs down to a fixed resolution — commonly 96 or 150 dpi — and re-compresses them as JPEG. That is destructive and one-way. If the PDF you have was made that way, the sharp original is not inside it. No extractor, ours or Adobe's, can hand you something the file does not contain.
It is not an image at all. Charts, maps, logos and diagrams are frequently drawn as vector outlines: lines and curves with no pixels anywhere. So is text. Extraction finds nothing to extract, and anything you screenshot is again at screen resolution. Vector art is the good case — it has no native size, so you can render it at any resolution you like.
The quick test: zoom to 800% in your PDF reader. If the thing stays crisp, it is vector art or text. If it goes to blocks, it is a raster image, and the size of those blocks tells you roughly how much resolution is in there.
Find out what is actually in the file before you blame a tool
Two numbers settle the argument: how many pixels the image stores, and how large it is drawn.
Pull the image out, look at its pixel dimensions in your file browser, then divide by the printed width in inches. A picture 1000 pixels wide, placed five inches across the page, is a 200 dpi picture. That is fine for a screen and marginal for print, where 300 dpi is the number people mean by "print quality". If you need the page's dimensions to do that sum, our PDF inspector reads the page size straight out of the file in your browser without uploading it.
If you would rather have the answer in one line, pdfimages -list document.pdf from
poppler-utils prints a table of every image in the file with its
pixel size, its colour space, its compression and — the useful column — the effective dpi it is
drawn at. It is free, it is on every Linux distribution and available through Homebrew, and for
diagnosing this specific problem nothing in a browser beats it. pdfimages -all document.pdf out
then writes every one of them to disk.
Get the embedded original out
If the image is a raster and the file holds more pixels than your screenshot did, you want the object itself, untouched.
- Put the PDF into Extract images from PDF. It walks the page resources rather than drawing anything, so what comes back is the picture at its stored pixel size, not a capture of a page at whatever zoom a renderer picked.
- Leave Save them as on as they are in the file. JPEGs inside a PDF are complete JPEG files already, so that setting hands them over byte for byte — nothing decoded, nothing re-encoded, no second generation of loss. The other settings convert, which is occasionally what you want and never what you want here.
- If the picture you are after does not appear, lower Ignore images narrower than from 32 pixels. The default keeps out the hairlines and bullet glyphs that page layouts are full of; the result tells you how many it skipped, so you know whether it is worth dropping.
- Open the zip. Files are named
document-p3-2.jpg— document, page, position on the page. Check the pixel dimensions of the one you wanted against your screenshot. If it is larger, that was your whole problem.
Vector art: render it at whatever size you like
If the 800% test came back crisp, stop trying to extract. There are no pixels in there to recover, and Extract images from PDF will tell you it found nothing.
Draw the page instead. PDF to JPG renders pages at a resolution you choose, up to 400 dpi, and vector artwork is redrawn at whatever you ask for rather than scaled up — so a 300 dpi render of a chart is genuinely 300 dpi sharp. Choose PNG rather than JPEG for anything with type or fine lines in it, because JPEG leaves faint haloes around black-on-white edges. Then crop the picture out of the rendered page.
Two things to know: the render is the whole page, not the diagram on its own, and the resulting image contains no text at all — nothing in it can be selected, searched or read by a screen reader.
What our tools will not do
Extraction returns what is embedded, and nothing more. If the PDF only ever held a 96 dpi copy, 96 dpi is what comes out. There is no setting anywhere that recovers detail thrown away at creation time, and any tool that implies otherwise is either upscaling or lying.
It cannot cut a picture out of a page. You get the image objects the file stores. If a photograph was placed behind a mask or clipped to a circle, you get the whole rectangle it was cut from, without the mask.
A few images cannot be decoded on this deployment — JPEG 2000 and JBIG2 need decoders that are not installed. They are counted in the result rather than dropped quietly, and as they are in the file will usually still hand a JPEG 2000 over untouched even so.
The same image is emitted once, however many pages draw it, so a letterhead logo comes back as one file named after the first page it appeared on.
Upscaling, honestly
When the file really does only contain a soft copy, upscaling is the only remaining option, and it deserves a straight answer. Ordinary resampling — dragging the corner in an image editor — adds pixels and no information; the result is the same blur, larger. Machine-learning upscalers such as Upscayl, which is free and open source, do better than that: they invent plausible detail. On a photograph the result is often convincing. On text inside an image, on a logo, or on anything a person will read closely, invented detail is exactly the wrong kind of detail, and it will not survive scrutiny in print.
Upscale when you need something to look acceptable. Do not upscale when accuracy matters.
Ask for the source file
This is frequently faster than everything above. Whoever made the PDF had the photograph, the chart, or the InDesign document, and sending it takes them thirty seconds. Ask for "the original image file" rather than "a better PDF" — a re-export at higher quality cannot restore what the first export destroyed either.
Two related things worth knowing while you are in here. If the extracted images turn out to be enormous and you were trying to make the PDF smaller rather than sharper, Compress PDF works on exactly these image objects, and there is a reason a text-only PDF refuses to shrink. And if what you extracted is a scanned page with a black band down one side, that is the scanner lid and it crops off in seconds.