Konversi pdf ke jpg cepat di Linux ingin [ditutup]

11

Saat ini saya menggunakan ImageMagick untuk mengonversi PDF ke gambar raster JPEG. Ini sangat lambat dan menghabiskan banyak memori.

Perintah yang saya gunakan adalah:

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

Saya kira itu lambat karena menggunakan Ghostscript. Tetapi harus ada cara yang lebih cepat untuk melakukannya pada kotak Linux.

Adakah yang menemukan solusi yang lebih baik?

mat3001
sumber
Berapa banyak waktu, berapa banyak memori?
Zoredache

Jawaban:

18

Menggunakan Ghostscript secara langsung (alih-alih menggunakan convertperintah ImageMagick , yang memanggil Ghostscript secara tidak langsung) memang lebih cepat. Dan itu memberi Anda lebih banyak kontrol tentang parameter konversi. Mencoba

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

dimana

  • -o: menentukan jalur keluaran + nama file (dan menghemat penggunaan -dBATCH -dNOPAUSE)
  • -dJPEGQ: menetapkan kualitas JPEG menjadi 95%
  • -r: mengatur resolusi ke 600dpi
  • -g: mengatur ukuran gambar ke 4960x7016px
  • -sDEVICE: mengatur output sebagai JPEG

Perintah ini mungkin akan memperlambat Anda dan membuat file lebih besar dari yang diharapkan. Untuk ukuran file yang lebih kecil dan eksekusi yang lebih cepat coba ini (yang mungkin mendekati kualitas output dari convertcommandline Anda ):

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

atau bahkan

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

(yang memberikan resolusi 72dpi, seringkali cukup baik untuk sebagian besar layar dan untuk sebagian besar aplikasi web).

Kurt Pfeifle
sumber
1
Kamu benar. Aku benar-benar tidak menganggap Imagemagick akan menjadi hambatan. Tapi saya mungkin harus mencoba. Terima kasih juga atas contoh-contohnya!
mat3001
10

BTW, salah satu alasan ImageMagick jauh lebih lambat adalah karena memanggil Ghostscript dua kali. Itu tidak mengonversi PDF => PNG dalam sekali jalan, tetapi menggunakan 2 langkah berbeda:

  • pertama kali menggunakan Ghostscript untuk PDF => PostScriptkonversi;
  • kemudian menggunakan Ghostscript untuk PostScript => PNGkonversi.

Anda dapat mempelajari tentang pengaturan rinci "delegasi" ImageMagick (program eksternal yang digunakan ImageMagick, seperti Ghostscript) dengan mengetik

convert -list delegate

(Di sistem saya itu adalah daftar 32 perintah yang berbeda.) Sekarang untuk melihat perintah mana yang digunakan untuk mengkonversi ke PNG, gunakan ini:

convert -list delegate | grep -i png

Ok, ini untuk Linux. Jika Anda menggunakan Windows, coba ini:

convert -list delegate | findstr /i png

Anda akan menemukan bahwa IM menghasilkan PNG hanya dari input PS atau EPS. Jadi bagaimana cara IM (E) PS dari PDF Anda? Mudah:

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

Ah! Ia menggunakan Ghostscript untuk membuat konversi PDF => PS, kemudian menggunakan Ghostscript lagi untuk membuat konversi PS => PNG. Bekerja, tetapi bukan cara paling efisien jika Anda tahu bahwa Ghostscript dapat melakukan PDF => PNG dalam sekali jalan. Dan lebih cepat. Dan dalam kualitas yang jauh lebih baik.

Tentang penanganan IM konversi PDF ke gambar melalui delegasi Ghostscript Anda harus mengetahui dua hal pertama dan terutama:

  1. Secara default, jika Anda tidak memberikan parameter tambahan, Ghostscript akan menampilkan gambar dengan resolusi 72dpi. Itulah sebabnya kadang-kadang orang di sini menyarankan untuk menambahkan -density 600sebagai convertparameter yang memberitahu Ghostscript untuk menggunakan resolusi 600 dpi untuk output gambarnya.
  2. Jalan memutar IM untuk memanggil Ghostscript dua kali untuk mengkonversi pertama PDF => PSdan kemudian PS => PNGmerupakan kesalahan nyata. Karena Anda tidak pernah menang dan harldy menjaga kualitas pada langkah pertama, tetapi sangat sering kehilangan beberapa. Alasan:
    • PDF dapat menangani transparansi, yang PostScript tidak bisa.
    • PDF dapat menanamkan font TrueType, yang PostScript tidak bisa. dll.
      (Konversi dalam arah yang berlawanan PS => PDF,, karenanya tidak begitu penting ....)

Itu sebabnya saya menyarankan Anda mengonversi PDF Anda dalam sekali jalan ke PNG (atau JPEG) menggunakan Ghostscript secara langsung. Dan gunakan versi terbaru 8.71 (akan segera dirilis: 9.00) dari Ghostscript ...

Kurt Pfeifle
sumber
6

Program pdftoppmdari paket poppler juga dapat membuat JPEG, dan bagi saya itu sekitar dua kali lebih cepat menggunakan gsseperti yang dijelaskan di atas:

pdftoppm -jpeg -r 300 foo.pdf foo.jpg
pengguna177876
sumber
Saran yang bagus. Baru saja memperbaiki bug utama yang gagal dalam aplikasi saya, beralih ke pdftoppm berkat jawaban ini - tidak pernah tahu tentang itu sebelumnya!
danmactough
Anda, Tuan, layak mendapatkan medali untuk ini :)
Milan Todorovic
2
tidak lebih cepat dari gs
Ghilas BELHADJ
6

Dalam pengalaman saya, MuPDF jauh lebih cepat daripada Ghostscript. Ini adalah proyek yang jauh lebih baru tanpa banyak kesalahan di gs. Coba jika cocok untuk penggunaan Anda!

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

Jika Anda memiliki distribusi linux yang lebih lama dan menginstal mupdf-tools dari repositori, mudrawmungkin masih dipanggilpdfdraw

Anda kemudian harus mengkonversi png ke jpeg menggunakan misalnya imagemagick. Tetapi itu masih akan lebih cepat dari Ghostscript.

Josef berkata Reinstate Monica
sumber
2
Dalam pengujian saya konversi PDF ke PNG MuPDF sekitar 5-6 kali lebih cepat dari Ghostscript. Terima kasih atas solusinya!
Dmitry Akinin
1
Ini sangat berguna. Dibutuhkan detik di mana Ghostscript akan memakan waktu beberapa menit, ditambah baris perintah sangat mudah! Terima kasih banyak atas perhatiannya!
likeitlikeit