Linux üzerinde hızlı pdf jpg dönüştürme istedi [kapalı]


11

Şu anda PDF'leri JPEG tarama görüntülerine dönüştürmek için ImageMagick kullanıyorum. Acı verici bir şekilde yavaştır ve çok fazla bellek kullanır.

Kullandığım komut şuydu:

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

Sanırım yavaş çünkü Ghostscript kullanıyor. Ancak bunu bir Linux kutusunda yapmanın daha hızlı bir yolu olmalı.

Daha iyi bir çözüm bulan var mı?


Ne kadar zaman, ne kadar bellek?
Zoredache

Yanıtlar:


18

Doğrudan Ghostscript kullanmak ( convertdolaylı olarak Ghostscript'i çağıran ImageMagick'in komutunu kullanmak yerine ) gerçekten daha hızlıdır. Ve size dönüşüm parametreleri üzerinde daha fazla kontrol sağlar. Deneyin

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

nerede

  • -o: çıktı yolunu + dosya adını belirler (ve kullanımını kaydeder -dBATCH -dNOPAUSE)
  • -dJPEGQ: JPEG kalitesini% 95'e ayarlar
  • -r: çözünürlüğü 600 dpi olarak ayarlar
  • -g: görüntü boyutunu 4960x7016 piksel olarak ayarlar
  • -sDEVICE: çıktıyı JPEG olarak ayarlar

Bu komut muhtemelen sizin için yavaşlayacak ve beklenenden daha büyük dosyalar oluşturacaktır. Daha küçük dosya boyutları ve daha hızlı yürütme için bunu deneyin (muhtemelen convertkomut satırınızın çıktı kalitesine yaklaşır ):

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

ya da

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

(72dpi çözünürlük verir, çoğu ekran ve çoğu web uygulaması için genellikle yeterince iyidir).


1
Haklısın. Imagemagick'in darboğaz olacağı konusunda hiçbir şey yapmadım. Ama muhtemelen denemeliydim. Harika örnekler için de teşekkürler!
mat3001

10

BTW, ImageMagick'in bu kadar yavaş olmasının nedenlerinden biri Ghostscript'i iki kez çağırmasıdır. PDF => PNG'yi tek seferde dönüştürmez, ancak 2 farklı adım kullanır:

  • PDF => PostScriptdönüşüm için önce Ghostscript kullanır ;
  • daha sonra PostScript => PNGdönüşüm için Ghostscript kullanır .

ImageMagick'in "delegeleri" (ImageMagick'in Ghostscript gibi kullandığı harici programlar) yazarak ayrıntılı ayarları öğrenebilirsiniz.

convert -list delegate

(Sistemimde 32 farklı komutun bir listesi.) Şimdi PNG'ye dönüştürmek için hangi komutların kullanıldığını görmek için şunu kullanın:

convert -list delegate | grep -i png

Tamam, bu Linux içindi. Windows kullanıyorsanız, şunu deneyin:

convert -list delegate | findstr /i png

IM'nin yalnızca PS veya EPS girişinden PNG ürettiğini keşfedeceksiniz. Peki IM PDF'den (E) PS'yi nasıl alıyor? Kolay:

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

Ah! PDF => PS dönüşümü yapmak için Ghostscript'i kullanır, ardından PS => PNG dönüşümü yapmak için tekrar Ghostscript'i kullanır. Çalışır, ancak Ghostscript'in PDF => PNG'yi bir seferde yapabileceğini biliyorsanız en etkili yol değildir . Ve daha hızlı. Ve çok daha kaliteli.

IM'in Ghostscript delegesi aracılığıyla görüntülere PDF dönüştürmesini ele alması hakkında her şeyden önce iki şeyi bilmelisiniz:

  1. Varsayılan olarak, fazladan bir parametre vermezseniz, Ghostscript 72 dpi çözünürlüklü görüntüler verir. Bu nedenle bazen buradaki insanlar , Ghostscript'e görüntü çıktısı için 600 dpi çözünürlük kullanmasını söyleyen -density 600bir convertparametre olarak eklemeyi önerir .
  2. IM dönüşümü Ghostscript önce dönüştürmek için iki kez çağırmak için PDF => PSve sonra PS => PNGgerçek bir gaf. Çünkü asla ilk adımda kaliteyi kazanmazsınız ve kalmazsınız, ancak çoğu zaman bazılarını kaybedersiniz. Nedenleri:
    • PDF, PostScript'in yapamadığı asetatları işleyebilir.
    • PDF, PostScript'in yapamadığı TrueType yazı tiplerini gömebilir. etc.pp.
      (Ters yönde dönüşüm PS => PDF, bu nedenle bu kadar kritik değil ....)

Bu yüzden PDF'lerinizi doğrudan Ghostscript'i kullanarak bir kerede PNG'ye (veya JPEG) dönüştürmenizi öneririm. Ve Ghostscript'in en son 8.71 sürümünü (yakında yayınlanacak: 9.00) kullanın ...


6

pdftoppmPoppler paketinden gelen program da JPEG oluşturabilir ve benim için gsyukarıda açıklanandan iki kat daha hızlıdır :

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

Ne harika bir öneri. Sadece bu cevap sayesinde pdftoppm geçiş benim büyük, app çökmesini bir hata düzeltildi - daha önce hiç bilmiyordum!
danmactough

Siz, efendim, bunun için bir madalyayı hak ediyorsunuz :)
Milan Todorovic

2
gs'den

6

Deneyimlerime göre, MuPDF Ghostscript'ten çok daha hızlı. Bu gs fazla bir şey olmadan çok daha yeni bir projedir. Kullanım alanınıza uygun olup olmadığını deneyin!

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

Daha eski bir linux dağıtımınız varsa ve depodan mupdf-tools yüklediyseniz, mudrawyine de çağrılabilirpdfdraw

Daha sonra, örneğin imagemagick kullanarak png'yi jpeg'ye dönüştürmeniz gerekir. Ama yine de Ghostscript'ten daha hızlı olacak.


2
Testimde MuPDF'nin PDF'den PNG'ye dönüştürülmesi Ghostscript'ten yaklaşık 5-6 kat daha hızlı. Çözüm için teşekkürler!
Dmitry Akinin

1
Bu inanılmaz derecede faydalı. Ghostscript'in dakikalar alması birkaç saniye sürüyor, ayrıca komut satırı bir esinti! Bunu dikkatime sunduğunuz için çok teşekkür ederim!
likeitlikeit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.