Швидке перетворення PDF в jpg в Linux [закрито]


11

Зараз я використовую ImageMagick для перетворення PDF-файлів у растрові зображення JPEG. Він болісно повільний і використовує багато пам’яті.

Я використовував команду:

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

Я думаю, що це повільно, оскільки він використовує Ghostscript. Але повинен бути більш швидкий спосіб зробити це на вікні Linux.

Хтось знайшов краще рішення?


Скільки часу, скільки пам’яті?
Zoredache

Відповіді:


18

Використання Ghostscript безпосередньо (замість використання convertкоманди ImageMagick , яка опосередковано викликає Ghostscript) - справді швидше. І це дає вам більше контролю над параметрами конверсії. Спробуйте

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

де

  • -o: визначає вихідний шлях + ім'я файлу (і зберігає використання -dBATCH -dNOPAUSE)
  • -dJPEGQ: встановлює якість JPEG на 95%
  • -r: встановлює роздільну здатність 600dpi
  • -g: встановлює розмір зображення на 4960x7016px
  • -sDEVICE: встановлює вихід у форматі JPEG

Ця команда, ймовірно, буде все ще сповільнювати вас та створювати файли, більші, ніж очікувалося. Для менших розмірів файлів та швидшого виконання спробуйте це (що, напевно, наближається до якості виводу вашого convertкомандного рядка):

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

або навіть

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

(що дає роздільну здатність 72dpi, часто досить добре для більшості екранів і для більшості веб-додатків).


1
Ти маєш рацію. Я справді не знав, що Imagemagick буде вузьким місцем. Але я, мабуть, мав би спробувати. Дякую також за чудові приклади!
mat3001

10

До речі, одна з причин ImageMagick настільки повільніше полягає в тому, що вона двічі викликає Ghostscript. Він не перетворює PDF => PNG за один раз, але використовує 2 різні кроки:

  • він спочатку використовує Ghostscript для PDF => PostScriptперетворення;
  • Потім він використовує Ghostscript для PostScript => PNGперетворення.

Ви можете дізнатися про детальні налаштування "делегатів" ImageMagick (зовнішніх програм, які використовує ImageMagick, наприклад, Ghostscript), набравши текст

convert -list delegate

(У моїй системі це список із 32 різних команд.) Тепер, щоб побачити, які команди використовуються для перетворення в PNG, використовуйте це:

convert -list delegate | grep -i png

Гаразд, це було для Linux. Якщо ви працюєте в Windows, спробуйте це:

convert -list delegate | findstr /i png

Ви дізнаєтесь, що чат виробляє PNG лише з вводу PS або EPS. Тож як IM отримує (E) PS з вашого PDF? Легко:

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

Ах! Він використовує Ghostscript для перетворення PDF => PS, потім знову використовує Ghostscript для перетворення PS => PNG. Працює, але це не найефективніший спосіб, якщо ви знаєте, що Ghostscript може зробити PDF => PNG за один раз. І швидше. І в набагато кращій якості.

Про обробку чату перетворенням PDF у зображення через делегат Ghostscript слід передусім знати дві речі:

  1. За замовчуванням, якщо не вказати додатковий параметр, Ghostscript виведе зображення з роздільною здатністю 72dpi. Ось чому інколи тут люди пропонують додати -density 600як convertпараметр, який вказує Ghostscript використовувати роздільну здатність 600 dpi для виведення зображення.
  2. Об’їзд чату для виклику Ghostscript двічі для перетворення спочатку, PDF => PSа потім PS => PNG- справжня помилка. Тому що ти ніколи не виграєш і твердо тримаєш якість на першому кроці, але дуже часто програєш. Причини:
    • PDF може обробляти прозорі плівки, що PostScript не може.
    • PDF може вбудовувати шрифти TrueType, які PostScript не може. etc.pp.
      (Перетворення в зворотному напрямку PS => PDF, для цього не так важливо ....)

Ось чому я б запропонував вам конвертувати PDF-файли за один раз у PNG (або JPEG), використовуючи безпосередньо Ghostscript. І використовуйте найновішу версію 8.71 (незабаром вийде: 9.00) програми Ghostscript ...


6

Програма pdftoppmз пакету poppler також здатна створювати JPEG, і для мене це приблизно вдвічі швидше використання, gsяк описано вище:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg

Яка чудова пропозиція. Я просто виправив основну помилку, що перебуває у програмі, мій перехід на pdftoppm завдяки цій відповіді - ніколи про це раніше не знав!
danmactough

Ви, пане, заслужили за це медаль :)
Мілан Тодорович

2
це не швидше, ніж gs
Ghilas BELHADJ

6

На мій досвід, MuPDF набагато швидше, ніж Ghostscript. Це набагато новіший проект без особливої ​​суми в німецькій мові. Спробуйте, якщо він підходить для вашої користувальниці!

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

Якщо у вас старіший дистрибутив Linux та встановлено mupdf-інструменти із сховища, mudrawможливо, все-таки викликpdfdraw

Потім вам доведеться перетворити png в jpeg, наприклад, imagemagick. Але це все одно буде швидше, ніж Ghostscript.


2
У моєму тесті перетворення PDF в PNG MuPDF приблизно в 5-6 разів швидше, ніж Ghostscript. Дякую за рішення!
Дмитро Акінін

1
Це неймовірно корисно. Минуть секунди, де Ghostscript зайняв би хвилини, плюс командний рядок - вітер! Дуже дякую за те, що ви звернули на це увагу!
likeitlikeit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.