Poszukiwana szybka konwersja pdf do jpg w systemie Linux [zamknięte]

11

Obecnie używam ImageMagick do konwersji plików PDF na obrazy rastrowe JPEG. Jest boleśnie powolny i zużywa dużo pamięci.

Polecenie, którego użyłem to:

convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg

Myślę, że jest powolny, ponieważ używa Ghostscript. Ale musi być szybszy sposób, aby to zrobić na Linux-ie.

Czy ktoś znalazł lepsze rozwiązanie?

mat3001
źródło
Ile czasu, ile pamięci?
Zoredache,

Odpowiedzi:

18

Używanie Ghostscript bezpośrednio (zamiast convertpolecenia ImageMagick , które wywołuje Ghostscript pośrednio) jest rzeczywiście szybsze. Daje to większą kontrolę nad parametrami konwersji. Próbować

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d.jpg \
   -dJPEGQ=95      \
   -r600x600       \
   -g4960x7016     \
   foo.pdf

gdzie

  • -o: określa ścieżkę wyjściową + nazwę pliku (i oszczędza użycie -dBATCH -dNOPAUSE)
  • -dJPEGQ: ustawia jakość JPEG na 95%
  • -r: ustawia rozdzielczość na 600 dpi
  • -g: ustawia rozmiar obrazu na 4960 x 7016 pikseli
  • -sDEVICE: ustawia wyjście jako JPEG

To polecenie prawdopodobnie nadal będzie dla ciebie spowalniać i tworzyć pliki większe niż oczekiwano. Aby uzyskać mniejsze rozmiary plików i szybsze wykonanie, wypróbuj to (co prawdopodobnie zbliża się do jakości wyjściowej convertwiersza poleceń):

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_200dpi_q80.jpg \
   -dJPEGQ=80      \
   -r200x200       \
   -g1653x2339     \
   foo.pdf

lub nawet

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_default_a4.jpg \
   -sPAPERSIZE=a4 \
   foo.pdf

(co daje rozdzielczość 72dpi, często wystarczającą dla większości ekranów i większości aplikacji internetowych).

Kurt Pfeifle
źródło
1
Masz rację. Naprawdę nie sądziłem, że Imagemagick będzie wąskim gardłem. Ale prawdopodobnie powinienem był spróbować. Dziękuję również za wspaniałe przykłady!
mat3001
10

BTW, jednym z powodów, dla których ImageMagick jest o wiele wolniejszy, jest to, że wywołuje Ghostscript dwa razy. Nie konwertuje PDF => PNG za jednym razem, ale wykorzystuje 2 różne kroki:

  • najpierw używa Ghostscript do PDF => PostScriptkonwersji;
  • następnie używa Ghostscript do PostScript => PNGkonwersji.

Możesz dowiedzieć się o szczegółowych ustawieniach „delegatów” ImageMagick (programy zewnętrzne, z których korzysta ImageMagick, takie jak Ghostscript), pisząc

convert -list delegate

(W moim systemie jest to lista 32 różnych poleceń.) Teraz, aby zobaczyć, które polecenia są używane do konwersji na PNG, użyj tego:

convert -list delegate | grep -i png

Ok, to było dla Linuksa. Jeśli korzystasz z systemu Windows, spróbuj tego:

convert -list delegate | findstr /i png

Przekonasz się, że IM tworzy PNG tylko na podstawie PS lub EPS. Więc w jaki sposób IM pobiera (E) PS z twojego pliku PDF? Łatwo:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF

Ach! Używa Ghostscript do konwersji PDF => PS, a następnie Ghostscript ponownie do konwersji PS => PNG. Działa, ale nie jest najskuteczniejszym sposobem, jeśli wiesz, że Ghostscript może zrobić PDF => PNG za jednym razem. I szybciej. I w znacznie lepszej jakości.

O przetwarzaniu wiadomości błyskawicznych przez konwersję PDF na obrazy za pośrednictwem delegata Ghostscript powinieneś wiedzieć przede wszystkim dwie rzeczy:

  1. Domyślnie, jeśli nie podasz dodatkowego parametru, Ghostscript wyświetli obrazy o rozdzielczości 72dpi. Dlatego czasami ludzie tutaj sugerują dodanie -density 600jako convertparametru, który mówi Ghostscriptowi, aby używał rozdzielczości 600 dpi do wyświetlania obrazu.
  2. Objazd wiadomości błyskawicznych, aby wywołać Ghostscript dwa razy w celu konwersji, PDF => PSa następnie PS => PNGjest prawdziwym błędem. Ponieważ nigdy nie wygrywasz, a harldy utrzymuje jakość na pierwszym etapie, ale bardzo często przegrywasz. Powody:
    • PDF obsługuje folie, których nie obsługuje PostScript.
    • PDF może osadzać czcionki TrueType, czego nie potrafi PostScript. itp.
      (Konwersja w przeciwnym kierunku PS => PDF, dlatego nie jest aż tak krytyczna ....)

Właśnie dlatego zasugerowałem, aby przekonwertować pliki PDF za jednym razem do formatu PNG (lub JPEG) przy użyciu programu Ghostscript. I użyj najnowszej wersji 8.71 (wkrótce wydanej: 9.00) Ghostscript ...

Kurt Pfeifle
źródło
6

Program pdftoppmz pakietu poppler jest również w stanie tworzyć pliki JPEG, a dla mnie jest około dwa razy szybszy niż przy użyciu, gsjak opisano powyżej:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg
użytkownik177876
źródło
Co za świetna sugestia. Właśnie naprawiłem poważny błąd powodujący awarię aplikacji, przechodząc na pdftoppm dzięki tej odpowiedzi - nigdy wcześniej o tym nie wiedziałem!
danmactough
Panie, zasługujesz na medal za to :)
Milan Todorovic
2
nie jest szybszy niż gs
Ghilas BELHADJ
6

Z mojego doświadczenia wynika , że MuPDF jest znacznie szybszy niż Ghostscript. Jest to znacznie nowszy projekt bez większego zamieszania w gs. Spróbuj, jeśli pasuje do twojej skrzynki!

mudraw -w 1024 -h 768 -r 200 -c rgb -o bar%d.png foo.pdf

Jeśli masz starszą dystrybucję linuksową i zainstalowałeś narzędzia mupdf z repozytorium, mudrawmoże być nadal wywoływanepdfdraw

Następnie musisz przekonwertować png na JPEG, używając na przykład imagemagick. Ale nadal będzie szybszy niż Ghostscript.

Josef mówi Przywróć Monikę
źródło
2
W moim teście konwersja plików PDF do PNG przez MuPDF jest około 5-6 razy szybsza niż Ghostscript. Dziękuję za rozwiązanie!
Dmitry Akinin
1
Jest to niezwykle przydatne. Zajmie to sekundy, gdy Ghostscript zajmie kilka minut, a linia poleceń to pestka! Dziękuję bardzo za zwrócenie mojej uwagi!
likeitlikeit