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).
Odpowiedzi:
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ć
-density
do konwersji w wyższej rozdzielczości:(Możesz dodać
-units PixelsPerInch
lub w-units PixelsPerCentimeter
razie potrzeby. Domyślnie moja kopia to ppi.)Aktualizacja: Jak już wspomniałeś,
gscan2pdf
(sposób, w jaki go używasz) jest tylko opakowaniem dlapdfimages
(z popplera ).pdfimages
nie robi tego samego,convert
co 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.pdfimages
przeglą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,
pdfimages
znacznie lepiej wyodrębni je, ponieważ dostarczy ci surowe dane w oryginalnym rozmiarze. Prawdopodobnie zechcesz również skorzystać z tej-j
opcjipdfimages
, ponieważ plik PDF może zawierać surowe dane JPEG. Domyślniepdfimages
konwertuje wszystko do formatu PNM, a konwersja JPEG> PPM> JPEG jest procesem stratnym.Więc spróbuj
Konieczne może być wykonanie tej czynności krok
convert
po.jpg
kroku (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.
źródło
convert
jest 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
.Jak powiedziała odpowiedź studenta,
pdfimages
to dobra opcja. Z mojego doświadczenia zarównogs
iconvert
eksportu 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ćinskcape
do wyeksportowania strony, jak widać.Oto polecenia, których używam:
Pierwsze polecenie dzieli wszystkie strony. Drugie polecenie konwertuje strona po stronie na png. Możesz zatrzymać png lub przekonwertować je na JPEG
W porównaniu do
pdfimages
,gs
i ImageMagick'sconvert
uważaminkscape
eksport za najlepszą jakość.źródło
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ń.
źródło
Patrząc na kod źródłowy gscan2pdf zauważyłem, że używa pdfimages. Spowodowałoby
pdfimages file.pdf page
topage-001.ppm, page-002.ppm
itp.źródło
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ę.
convert
zasadniczo „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
pdfimages
w celu wyodrębnienia obrazów bez utraty jakości.źródło