ต้องการ 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

คำสั่งนี้อาจจะช้าสำหรับคุณและสร้างไฟล์ที่ใหญ่กว่าที่คาดไว้ สำหรับขนาดไฟล์ที่เล็กลงและการดำเนินการที่เร็วขึ้นลองสิ่งนี้ (ซึ่งอาจใกล้เคียงกับคุณภาพเอาต์พุตของconvertcommandline ของคุณ):

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

BTW หนึ่งในสาเหตุที่ 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

คุณจะค้นพบว่า IM สร้าง 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 เป็นรูปภาพของ IM ผ่านตัวแทน Ghostscript คุณควรรู้สองสิ่งแรกและสำคัญที่สุด:

  1. ตามค่าเริ่มต้นหากคุณไม่ได้ให้พารามิเตอร์เพิ่มเติม Ghostscript จะส่งออกภาพที่มีความละเอียด 72dpi นั่นเป็นสาเหตุที่บางครั้งผู้คนที่นี่แนะนำให้เพิ่ม-density 600เป็นconvertพารามิเตอร์ที่บอก Ghostscript ให้ใช้ความละเอียด 600 dpi สำหรับการแสดงผลภาพ
  2. ทางอ้อมของ IM เพื่อเรียก 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

คุณครับสมควรได้รับเหรียญนี้ :)
Milan Todorovic

2
มันไม่เร็วกว่า gs
Ghilas BELHADJ

6

จากประสบการณ์ของผมMuPDFนั้นเร็วกว่า Ghostscript มาก มันเป็นโครงการที่ใหม่กว่ามากโดยไม่มี cruft เป็นจำนวนมาก ลองถ้ามันเหมาะกับ usecase ของคุณ!

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

หากคุณมีการแจกจ่าย linux รุ่นเก่าและติดตั้ง mupdf-tools จากที่เก็บข้อมูลmudrawอาจยังคงถูกเรียกใช้pdfdraw

จากนั้นคุณต้องแปลง png เป็น jpeg โดยใช้ตัวอย่าง imagemagick แต่มันจะเร็วกว่า Ghostscript


2
ในการทดสอบการแปลง PDF เป็น PNG ของ MuPDF นั้นเร็วกว่า Ghostscript ประมาณ 5-6 เท่า ขอบคุณสำหรับการแก้ปัญหา!
Dmitry Akinin

1
มันมีประโยชน์อย่างเหลือเชื่อ ใช้เวลาไม่กี่วินาทีที่ Ghostscript ใช้เวลาไม่กี่นาทีรวมทั้งบรรทัดคำสั่งนั้นง่ายมาก! ขอบคุณมากที่นำสิ่งนี้มาสู่ความสนใจของฉัน!
likeitlikeit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.