it-swarm-eu.dev

pdf do jpg bez ztráty kvality; gscan2pdf

Když převedu soubor PDF na svazek souborů jpg pomocí

convert -quality 100 file.pdf page_%04d.jpg

Mám značné ztráty kvality.

Pokud však udělám následující, nedojde k žádné (patrné) ztrátě kvality:

Spusťte gscan2pdf, zvolte file-> import (a zvolte file.pdf). Poté přejděte do dočasného adresáře gscan2pdf. Existuje mnoho souborů pnm (jeden pro každou stránku souboru PDF). Teď ano

  for file in *.pnm; do            
  convert $file $file.jpg done

Výsledné soubory jpg jsou (zhruba) ve stejné kvalitě jako původní pdf (což je to, co chci).

Nyní je moje otázka, zda existuje jednoduchý způsob příkazového řádku, který převede soubor PDF na svazek souborů jpg bez znatelné ztráty kvality? (Výše uvedené řešení je příliš komplikované a časově náročné).

56
student

Není jasné, co máte na mysli pod pojmem „ztráta kvality“. To by mohlo znamenat spoustu různých věcí. Mohli byste poslat nějaké vzorky pro ilustraci? Možná vystřihněte stejnou sekci z nekvalitních a kvalitních verzí (jako PNG, aby nedošlo k další ztrátě kvality).

Možná budete muset použít -density K provedení převodu při vyšším dpi:

convert -density 300 file.pdf page_%04d.jpg

(V případě potřeby můžete připojit -units PixelsPerInch Nebo -units PixelsPerCentimeter. Moje kopie je nastavena na ppi.)

Aktualizace: Jak jste zdůraznili, gscan2pdf (Způsob, jakým jej používáte), je pouhým obalem pro pdfimages (od poppler ). pdfimages nedělá totéž, co convert dělá, když je zadán vstup PDF.

convert vezme PDF, vykreslí jej v určitém rozlišení a použije výslednou bitmapu jako zdrojový obrázek.

pdfimages hledá vložené bitmapové obrázky skrz PDF a exportuje každý do souboru. Jednoduše ignoruje všechny příkazy pro kreslení textu nebo vektorů v PDF.

Výsledkem je, že pokud máte PDF, který je jen obalem řady bitmap, pdfimages provede mnohem lepší práci při jejich extrahování, protože získá prvotní data v jeho původní velikost. Pravděpodobně budete také chtít použít volbu -j Pro pdfimages, protože PDF může obsahovat nezpracovaná data JPEG. Ve výchozím nastavení pdfimages převádí vše do formátu PNM a převod JPEG> PPM> JPEG je ztrátový proces.

Tak zkuste

pdfimages -j file.pdf page

Možná to budete muset následovat krokem convert.jpg (V závislosti na tom, jaký bitmapový formát použil PDF).

Zkoušel jsem tento příkaz na PDF, který jsem si vyrobil ze sekvence obrázků JPEG. Extrahované soubory JPEG byly byte-for-byte totožné s zdrojovými obrázky. Nemůžete získat vyšší kvalitu než to.

101
cjm

Jak studentova odpověď řekla, pdfimages je dobrá volba. Z mé zkušenosti exportuje gs i convert do špatné kvality bez ohledu na to, zda zadáte správné dpi.

Pokud však pdf obsahuje více vrstev na stránku, pdfimages nefunguje a vrstvy extrahují jako samostatný obrázek, v takovém případě je nejlepší exportovat stránku pomocí inskcape, jak je vidět.

Používám tyto příkazy:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

První příkaz rozdělí všechny stránky, druhý příkaz převede stránku po stránce na png. Můžete si je nechat png nebo je jednoduše převést na jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Ve srovnání s pdfimages, gs a convert ImageMagicku považuji export inkscape za nejlepší v kvalitě.

4

odpověď z @ cjm je správná, ale pokud se vám líbí GUI a nechcete vykreslit všechny stránky pdf, stačí získat nějaký obrázek, použijte gimp.

Otevřete pdf s gimp a dostanete okno importu se všemi vykreslenými stránkami. Vyberte si libovolné stránky a nastavte rozlišení na 600 pixelů/palec (v mnoha případech jsem našel 300 příliš ostrých). Uložit do požadovaného formátu pomocí „Soubor/export“

Každopádně musí existovat příznak pro výběr požadovaných stránek z příkazového řádku.

3
albfan

Při pohledu na zdrojový kód gscan2pdf jsem si všiml, že používá pdfimages. Tak pdfimages file.pdf page by vyústilo v page-001.ppm, page-002.ppm atd.

2
student

Ve vaší otázce není jasné, zda ve svém pdf mluvíte o textu a vektorové grafice, nebo zda váš PDF obsahuje vložené obrázky.

Po přečtení, o čem je gscan2pdf, se domnívám, že vaše soubory PDF obsahují (pouze) vloženou grafiku.

convert v podstatě „vytiskne“ váš pdf bez ohledu na obsah. Stejně jako @cjm navrhuje, možná budete chtít změnit hustotu tisku. Toto je jediný způsob, jak zvýšit kvalitu vektorové grafiky.

Pokud místo toho chcete extrahovat vložené obrázky (podobně jako gscan2pdf, zdá se, že to dělá), hádání hustoty obvykle povede ke ztrátě kvality nebo vyšší kvalitě, než je požadováno (a ke ztrátě místa na disku). Odpověď je tedy spíše extrahovat obrázek než vytisknout pdf. Viz tento článek , která v zásadě obhajuje použití pdfimages za účelem extrahování obrázků bez ztráty kvality.

2
asoundmove