pdf na jpg bez utraty jakości; gscan2pdf


51

Podczas konwersji pliku pdf na kilka plików jpg za pomocą

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

Mam znaczną utratę jakości.

Jeśli jednak wykonam następujące czynności, nie nastąpi (zauważalna) utrata jakości:

Uruchom gscan2pdf, wybierz plik-> importuj (i wybierz plik.pdf). Następnie przejdź do tymczasowego katalogu gscan2pdf. Istnieje wiele plików PNM (jeden na każdą stronę pliku pdf). Teraz ja robię

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

Powstałe pliki jpg są (z grubsza) tej samej jakości co oryginalne pliki pdf (to jest to, czego chcę).

Teraz moje pytanie brzmi: czy istnieje prosty sposób wiersza poleceń do konwersji pliku pdf na kilka plików jpg bez zauważalnej utraty jakości? (Powyższe rozwiązanie jest zbyt skomplikowane i czasochłonne).


W pytaniach nie jest jasne, czy mówisz o tekście i grafice wektorowej w pliku pdf, czy też chcesz wyodrębnić osadzone obrazy.
asoundmove,

Odpowiedzi:


92

Nie jest jasne, co rozumiesz przez „utratę jakości”. To może znaczyć wiele różnych rzeczy. Czy możesz opublikować próbki do zilustrowania? Być może wyciąć tę samą sekcję z wersji niskiej jakości i dobrej jakości (jako PNG, aby uniknąć dalszej utraty jakości).

Być może trzeba użyć -densitydo konwersji w wyższej rozdzielczości:

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

(Możesz dodać -units PixelsPerInchlub w -units PixelsPerCentimeterrazie potrzeby. Domyślnie moja kopia to ppi.)

Aktualizacja: Jak już wspomniałeś, gscan2pdf(sposób, w jaki go używasz) jest tylko opakowaniem dla pdfimages(z popplera ). pdfimagesnie robi tego samego, convertco w przypadku pliku PDF jako danych wejściowych.

convert pobiera plik PDF, renderuje go w pewnej rozdzielczości i wykorzystuje uzyskaną bitmapę jako obraz źródłowy.

pdfimagesprzegląda pliki PDF pod kątem osadzonych obrazów bitmapowych i eksportuje je do pliku. Po prostu ignoruje wszelkie polecenia rysowania tekstu lub wektorów w pliku PDF.

W rezultacie, jeśli masz plik PDF, który jest tylko opakowaniem wokół serii map bitowych, pdfimagesznacznie lepiej wyodrębni je, ponieważ dostarczy ci surowe dane w oryginalnym rozmiarze. Prawdopodobnie zechcesz również skorzystać z tej -jopcji pdfimages, ponieważ plik PDF może zawierać surowe dane JPEG. Domyślnie pdfimageskonwertuje wszystko do formatu PNM, a konwersja JPEG> PPM> JPEG jest procesem stratnym.

Więc spróbuj

pdfimages -j file.pdf page

Konieczne może być wykonanie tej czynności krok convertpo .jpgkroku (w zależności od formatu bitmapy, z którego korzystał plik PDF).

Wypróbowałem to polecenie w pliku PDF, który utworzyłem z sekwencji obrazów JPEG. Wyodrębnione pliki JPEG były bajt po bajcie identyczne z obrazami źródłowymi. Nie można uzyskać wyższej jakości niż to.


+1 Cieszę się, że nie poddałem się snobistycznemu błędnemu odczytaniu jednego z twoich zdań zainspirowanych we mnie i faktycznie wypróbowałem obrazy pdf - prawdopodobnie najbardziej przydatny program, z którego korzystałem od miesięcy! Zachęcam wszystkich do spróbowania!
ixtmixilix

@ixtmixilix, jestem ciekawa. Co źle odczytałeś i jak?
cjm

Dość niesamowite! Rozwiązałem mój dzień. Dziękuję Ci!
Geppettvs D'Constanzo

convertjest również niepraktyczne w przypadku dużych plików PDF. Na przykład przetworzenie książki złożonej z 700 6-megapikselowych stron zajęło 45 GB pamięci. Zajęło to również około tysiąc razy dłużej niż pdfimages.
Camille Goudeseune,

Odwrotnie, konwertuj obrazy do formatu pdf lub lepiej, zawiń obrazy do formatu pdf, użyj img2pdf, tutaj: gitlab.mister-muffin.de/josch/img2pdf (zawija jpg i jpg2000 do pdf).
erik

4

Jak powiedziała odpowiedź studenta, pdfimagesto dobra opcja. Z mojego doświadczenia zarówno gsi converteksportu do złej jakości niezależnie od tego czy określenie właściwej dpi.

Ale jeśli pdf ma wiele warstw na stronę pdfimages, nie działa i wyodrębnia warstwy jako osobny obraz, w takim przypadku najlepiej jest użyć inskcapedo wyeksportowania strony, jak widać.

Oto polecenia, których używam:

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

Pierwsze polecenie dzieli wszystkie strony. Drugie polecenie konwertuje strona po stronie na png. Możesz zatrzymać png lub przekonwertować je na JPEG

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

W porównaniu do pdfimages, gsi ImageMagick's convertuważam inkscapeeksport za najlepszą jakość.


3

odpowiedź z @cjm jest poprawna, ale jeśli podoba ci się GUI i nie chcesz renderować wszystkich stron pdf, tylko żeby uzyskać obraz, użyj gimp.

Otwórz pdf z gimp, a otrzymasz okno importu z wyrenderowanymi wszystkimi stronami. Wybierz dowolne strony i ustaw rozdzielczość na 600 pix / cal (w wielu przypadkach stwierdziłem 300 za dużo wyostrzenia). Zapisz w dowolnym formacie dzięki „Plikowi / eksportowi”

W każdym razie musi istnieć flaga, aby wybrać żądane strony z wiersza poleceń.


2

Patrząc na kod źródłowy gscan2pdf zauważyłem, że używa pdfimages. Spowodowałoby pdfimages file.pdf pageto page-001.ppm, page-002.ppmitp.


pdfimages naprawdę działa
Eduard Florinescu

2

W twoim pytaniu nie jest jasne, czy mówisz o tekście i grafice wektorowej w pdf, czy też pdf zawiera osadzone obrazy.

Po przeczytaniu, o co chodzi w gscan2pdf, domyślam się, że twoje pliki pdf zawierają (tylko) osadzoną grafikę.

convertzasadniczo „drukuje” twój pdf bez względu na treść. Jak sugeruje @cjm, możesz chcieć zmienić gęstość wydruku. Jest to jedyny sposób na poprawę jakości grafiki wektorowej.

Jeśli zamiast tego chcesz wyodrębnić osadzone obrazy (podobnie jak robi to gscan2pdf), odgadnięcie gęstości zwykle prowadzi do utraty jakości lub wyższej jakości niż jest to wymagane (i marnowania miejsca na dysku). Odpowiedzią jest więc wyodrębnienie obrazu zamiast wydrukowania pliku pdf. Zobacz ten artykuł, który zasadniczo zaleca użycie pdfimagesw celu wyodrębnienia obrazów bez utraty jakości.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.