लिनक्स पर jpg के लिए फास्ट पीडीएफ रूपांतरण [बंद] चाहता था


11

मैं वर्तमान में PDFs को JPEG रेखापुंज छवियों में बदलने के लिए ImageMagick का उपयोग कर रहा हूं। यह दर्दनाक रूप से धीमा है और बहुत अधिक मेमोरी का उपयोग करता है।

मेरे द्वारा उपयोग की जाने वाली कमांड थी:

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

मुझे लगता है कि यह धीमा है क्योंकि यह घोस्टस्क्रिप्ट का उपयोग करता है। लेकिन लिनक्स बॉक्स पर ऐसा करने का एक तेज़ तरीका होना चाहिए।

क्या किसी ने बेहतर समाधान पाया है?


कितना समय, कितनी स्मृति?
Zoredache

जवाबों:


18

प्रत्यक्ष रूप से घोस्टस्क्रिप्ट का उपयोग करना (इसके बजाय ImageMagick के convertकमांड का उपयोग करना , जिसे घोस्टस्क्रिप्ट को अप्रत्यक्ष रूप से कहते हैं) वास्तव में तेज है। और यह आपको रूपांतरण मापदंडों के बारे में अधिक नियंत्रण प्रदान करता है। प्रयत्न

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

BTW, एक कारण ImageMagick इतना धीमा है कि इसे दो बार घोस्टस्क्रिप्ट कहा जाता है। यह पीडीएफ => पीएनजी को एक बार में परिवर्तित नहीं करता है, लेकिन 2 अलग-अलग चरणों का उपयोग करता है:

  • यह पहली बार PDF => PostScriptरूपांतरण के लिए घोस्टस्क्रिप्ट का उपयोग करता है ;
  • यह तब PostScript => PNGरूपांतरण के लिए घोस्टस्क्रिप्ट का उपयोग करता है ।

आप विस्तृत सेटिंग्स के बारे में जान सकते हैं ImageMagick के "डेलीगेट्स" (बाहरी प्रोग्राम ImageMagick का उपयोग करता है, जैसे कि Ghostscript टाइप करके।

convert -list delegate

(मेरे सिस्टम पर यह 32 अलग-अलग कमांडों की एक सूची है।) अब यह देखने के लिए कि कौन-सी कमांड पीएनजी में कनवर्ट करने के लिए उपयोग की जाती हैं, इसका उपयोग करें:

convert -list delegate | grep -i png

ठीक है, यह लिनक्स के लिए था। यदि आप विंडोज पर हैं, तो यह कोशिश करें:

convert -list delegate | findstr /i png

आपको पता चलेगा कि IM केवल PS या EPS इनपुट से PNG का उत्पादन करता है। तो IM कैसे मिलता है (E) PS आपके PDF से? आसान:

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

आह! यह एक पीडीएफ => पीएस रूपांतरण बनाने के लिए घोस्टस्क्रिप्ट का उपयोग करता है, फिर एक पीएस => पीएनजी रूपांतरण बनाने के लिए फिर से घोस्टस्क्रिप्ट का उपयोग करता है। काम करता है, लेकिन सबसे कुशल तरीका नहीं है यदि आप जानते हैं कि घोस्टस्क्रिप्ट एक बार में पीडीएफ => पीएनजी कर सकता है । और तेज। और बहुत बेहतर गुणवत्ता में।

भूत के प्रतिनिधि के माध्यम से छवियों के लिए पीडीएफ रूपांतरण के आईएम से निपटने के बारे में आपको सबसे पहले और सबसे महत्वपूर्ण दो बातें पता होनी चाहिए:

  1. डिफ़ॉल्ट रूप से, यदि आप एक अतिरिक्त पैरामीटर नहीं देते हैं, तो घोस्टस्क्रिप्ट 72dpi रिज़ॉल्यूशन के साथ छवियों का उत्पादन करेगा। इसलिए कभी-कभी यहां के लोग -density 600एक convertपैरामीटर के रूप में जोड़ने का सुझाव देते हैं जो घोस्टस्क्रिप्ट को अपनी छवि आउटपुट के लिए 600 डीपीआई रिज़ॉल्यूशन का उपयोग करने के लिए कहता है।
  2. पहली बार बदलने के लिए घोस्टस्क्रिप्ट को दो बार कॉल करने के लिए आईएम का चक्कर PDF => PSऔर फिर PS => PNGएक वास्तविक गड़गड़ाहट है। क्योंकि आप कभी भी जीतते नहीं हैं और पहले चरण में परेशान रहते हैं, लेकिन बहुत अक्सर कुछ ढीले हो जाते हैं। कारण:
    • पीडीएफ पारदर्शिता को संभाल सकता है, जो पोस्टस्क्रिप्ट नहीं कर सकता है।
    • PDF ट्रू टाइप फ़ॉन्ट को एम्बेड कर सकता है, जो पोस्टस्क्रिप्ट नहीं कर सकता है। etc.pp.
      (विपरीत दिशा में रूपांतरण, इसके लिए PS => PDFमहत्वपूर्ण नहीं है ...)

इसीलिए मैंने सुझाव दिया है कि आप अपने PDF को सीधे एक साथ PNG (या JPEG) में घोस्टस्क्रिप्ट का उपयोग करके परिवर्तित करें। और सबसे हाल के संस्करण का उपयोग करें 8.71 (जल्द ही जारी किया जाना है: 9.00) घोस्टस्क्रिप्ट ...


6

pdftoppmपॉपलर पैकेज से प्रोग्राम जेपीईजी बनाने में भी सक्षम है, और मेरे लिए यह दो बार के रूप में उपवास के रूप gsमें वर्णित के रूप में उपयोग कर रहा है:

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

क्या शानदार सुझाव है। बस इस जवाब के लिए धन्यवाद - एक प्रमुख, app दुर्घटनाग्रस्त बग मेरे pdftoppm के लिए स्विचन तय!
danmactough

आप, सर, इसके लिए एक पदक के हकदार हैं :)
मिलान टोडोरोविच

2
यह जीएस से ज्यादा तेज नहीं है
घिल्लस बीएलएएचजेजे

6

मेरे अनुभव में, MuPDF घोस्टस्क्रिप्ट से बहुत तेज है। यह gs में बहुत अधिक नए प्रोजेक्ट के बिना cruft है। अगर यह हमारे usecase के लिए फिट बैठता है की कोशिश करो!

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

यदि आपके पास एक पुराना लिनक्स वितरण है और रिपॉजिटरी से mupdf-tools स्थापित है, तब mudrawभी कहा जा सकता हैpdfdraw

फिर आपको उदाहरण इमेजमैकिक का उपयोग करके पीएनजी को जेपीईजी में बदलना होगा। लेकिन यह अभी भी घोस्टस्क्रिप्ट से तेज होगा।


2
मेरे परीक्षण में म्यूपीडीएफ की पीडीएफ से पीएनजी रूपांतरण तक घोस्टस्क्रिप्ट से लगभग 5-6 गुना तेज है। समाधान के लिए धन्यवाद!
दिमित्री एकिन

1
यह अविश्वसनीय रूप से उपयोगी है। यह सेकंड लेता है जहाँ घोस्टस्क्रिप्ट को मिनट लगेंगे, साथ ही कमांड लाइन एक हवा है! मेरे ध्यान में इसे लाने के लिए बहुत-बहुत धन्यवाद!
१०:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.