पीएनजी में एक पीडीएफ परिवर्तित


83

मैं एक पीडीएफ को पीएनजी छवि (कम से कम एक का कवर) में बदलने की कोशिश कर रहा हूं। मैं पीडीएफ़के साथ पीडीएफ के पहले पृष्ठ को सफलतापूर्वक निकाल रहा हूं। मैं रूपांतरण करने के लिए इमेजमैजिक का उपयोग कर रहा हूं:

convert cover.pdf cover.png

यह काम करता है, लेकिन दुर्भाग्य से cover.png गलत तरीके से प्रदान किया गया है (पीडीएफ में कुछ अल्फा ऑब्जेक्ट ठीक से प्रदान नहीं किए गए हैं)। मुझे पता है कि ImageMagick रूपांतरण करने के लिए GhostScript का उपयोग करता है और अगर मैं इसे सीधे gs के साथ करता हूं तो मुझे वांछित परिणाम मिल सकते हैं, लेकिन मैं कनवर्ट लाइब्रेरी का उपयोग करूंगा क्योंकि इसमें अन्य उपकरण हैं जिनका मैं लाभ उठाना चाहूंगा।

घोस्टस्क्रिप्ट में यह कमांड वांछित छवि को पूरा करती है:

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

मैं सोच रहा हूँ कि किसी भी तरह से तर्क को पास करके घोस्टस्क्रिप्ट में परिवर्तित किया जा सकता है या क्या मैं सीधे घोस्टस्क्रिप्ट को कॉल करने के साथ फंस गया हूं?


2
घोस्टस्क्रिप्ट को सीधे समस्या क्यों कहा जाता है?
क्विन

यह वास्तव में एक बड़ा सौदा नहीं है। मैं उसी समय कन्वर्ट के माध्यम से कुछ अन्य पैरामेट्स चलाना चाहता हूं और यह अच्छा होगा अगर मैं इसे एक कमांड में रख सकता हूं। मेरे कोड क्लीनर और अधिक सुसंगत रखता है। इसका मतलब एक कम अस्थायी फ़ाइल भी है।
एडम


आप gs कैसे कहते हैं और ImageMagick इसे कैसे कहते हैं, के बीच क्या अंतर है? ImageMagick (अनुयायियों के लिए ध्यान दें, भूत को अद्यतन करने के रूप में अच्छी तरह से मदद कर सकते हैं ...) के बारे में कुछ रिपोर्टिंग के लायक हो सकता है
rogerdpack

जवाबों:


71

आप एक कमांड को एक पाइप के माध्यम से दो कमांड ( gs, convert) के साथ उपयोग कर सकते हैं , यदि पहला कमांड अपने आउटपुट को स्टडआउट में लिख सकता है, और यदि दूसरा स्टड से इसके इनपुट को पढ़ सकता है।

  1. सौभाग्य से, gs stdout ( ... -o %stdout ...) को लिख सकते हैं ।
  2. सौभाग्य से, कन्वर्ट स्टडिन ( convert -background transparent - output.png) से पढ़ सकता है ।

समस्या सुलझ गयी:

  • एक विशेष छवि को संभालने वाले अल्फा चैनल के लिए जीएस का उपयोग किया जाता है,
  • पारदर्शी पृष्ठभूमि बनाने के लिए उपयोग किया जाने वाला कन्वर्ट,
  • पाइप डिस्क पर एक अस्थायी फ़ाइल लिखने से बचने के लिए उपयोग किया जाता है।

पूर्ण समाधान:

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

अपडेट करें

यदि आप प्रति पीडीएफ पृष्ठ पर एक अलग पीएनजी चाहते हैं, तो आप %dवाक्यविन्यास का उपयोग कर सकते हैं :

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

यह नाम दिया PNG फ़ाइलें पैदा करेगा page-000.png, page-001.png, ... (ध्यान दें कि %d- -counting है शून्य आधारित file-000.pngपीडीएफ के पेज 1 से मेल खाती है, 001पेज 2 के लिए ...

या, यदि आप अपनी पारदर्शी पृष्ठभूमि, 100-पृष्ठ पीडीएफ के लिए रखना चाहते हैं, तो करें

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done

7
यह केवल मेरे लिए काम करता है अगर मैं -dBATCH -dNOPAUSE -dQUIETgs विकल्पों में जोड़ता हूं ।
फोर्ड

@फोर्ड: इसका मतलब है कि आपके पास घोस्टस्क्रिप्ट का एक पुराना संस्करण है। हाल के संस्करण कर सकते हैं -o output.fileऔर यह स्वचालित रूप से और चुपचाप -dBATCH -dNOPAUSE -dQUIETएक ही समय में भी सेट होता है।
कुर्ट फ़ेफ़ेले

@फोर्ड: हालाँकि, उपरोक्त उत्तर में मेरे पास एक गंभीर टाइपो था। मुझे आश्चर्य है कि क्यों उस के बावजूद 22 upvotes मिला :-)
कर्ट फ़िफ़ेल

मेरे लिए काम खोजें, लेकिन मैं चाहूंगा कि ऑटोमैटिकली एक मल्टीफेज पीडीएफ को इमेज 1 में कनवर्ट कर दे। png, image_2.png ... क्या एक कमांड में आसान है कि मैं प्रत्येक पेज को पीडीएफ फाइल से पहले निकालूं?
टारस

ठीक है मैंने अलग चित्र बनाए हैं। लेकिन मैं चाहता हूं कि "-ट्रांसपरेंस व्हाइट" कंवर्जन के दौरान 'कन्वर्ट' पैरामीटर हो। मैं इसे पाइप के साथ करने में सक्षम था, लेकिन बिना?
टारस

29

सभी उपलब्ध विकल्पों में से मैंने पीएनजी को पीडीएफ परिवर्तित करते समय सबसे सटीक परिणाम देने के लिए इंकस्केप को पाया। विशेष रूप से जब स्रोत फ़ाइल में पारदर्शी परतें थीं, तो इंकस्केप सफल हुआ जहां Imagemagick और अन्य उपकरण विफल हो गए।

यह वह कमांड है जिसका मैं उपयोग करता हूं:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

और यहाँ इसे एक स्क्रिप्ट में लागू किया गया है:

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."

21

पीडीएफ को इमेज फाइल में बदलने के लिए निम्न कमांड का उपयोग करें:

पीएनजी के लिए gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

JPG के लिए gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

यदि आपके पास एकाधिक पृष्ठ हैं, तो % 03d नाम जोड़ें gs -o a%03d.jpg a.pdf

प्रत्येक विकल्प का क्या अर्थ है:

  • sDEVICE = {jpeg, pngalpha, png16m ...} - फिलाटाइप
  • -o - आउटपुट फ़ाइल (% stdout को stdout)
  • -dTextAlphaBits = 4 - फ़ॉन्ट एंटीलियासिंग।
  • -300 - 300 डीपीआई

9

poppler-utilsपैकेज में शामिल कमांड लाइन उपयोगिताओं में से एक का उपयोग कर सकते हैं :

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

उदाहरण:

pdftocairo -png mypage.pdf mypage.png

1
यह बहुत अच्छा है। यदि पीडीएफ बहु-पृष्ठ है तो कई पीएनजी फाइलें होंगी।
टॉमस गैंडर

5

काम करने के लिए स्वीकृत जवाब नहीं मिल सका। तब पता चला कि वास्तव में यह समाधान वैसे भी बहुत सरल है क्योंकि घोस्टस्क्रिप्ट न केवल मूल रूप से पीएनजी का समर्थन करता है, बल्कि कई अलग-अलग "एन्कोडिंग" भी हैं :

  • png256
  • png16
  • pnggray
  • pngmono
  • ...

मेरे लिए काम करने वाला शेल कमांड है:

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

यह pnggrayएन्कोडिंग और 500 डीपीआई का उपयोग करके test.pdf के पेज 2 को सेव करेगा ।


2

यहाँ SVG फ़ाइलों के लिए इस तरह की समस्या के बारे में एक जर्मन चर्चा है जहाँ इसका उपयोग करके हल किया जाता है

convert -background transparent

शायद यह आपके लिए भी काम करता है।


अफसोस की बात है कि मेरी समस्या का समाधान नहीं है। यह वास्तव में पीडीएफ में एक छवि है जिसमें एक अल्फा चैनल है जो हर चीज के ऊपर बैठता है।
एडम

2

मैं अपना समाधान जोड़ूंगा, यहां तक ​​कि सोचा कि उसका धागा पुराना है। शायद यह वैसे भी किसी की मदद करेगा।

सबसे पहले, मुझे पीडीएफ जेनरेट करना होगा। मैं उसके लिए XeLaTeX का उपयोग करता हूं :

xelatex test.tex

अब, ImageMagick और GraphicMagic दोनों पार्स मापदंडों को बाएं से दाएं, इसलिए सबसे बाएं पैरामीटर, पहले निष्पादित किया जाएगा। मैंने इस प्रक्रिया का उपयोग इष्टतम प्रसंस्करण के लिए किया:

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

यह पारदर्शी पृष्ठभूमि पर अच्छा ग्राफिक्स देता है, जो वास्तव में पृष्ठ पर है। -densityऔर -resizeमानकों, एक बेहतर विवरण के स्तर को देते हैं, और समग्र संकल्प वृद्धि हुई है।

मेरा सुझाव है कि अगर आपके लिए घनत्व कम किया जा सकता है। यह समय परिवर्तित करने में कटौती करेगा।


2

एक PDF के लिए जो ImageMagick गलत रंग दे रहा था, मैंने पाया कि GraphicsMagick ने बेहतर काम किया:

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg

सुनिश्चित करने के लिए पर्याप्त जानकारी नहीं है, लेकिन यह इसलिए हो सकता है क्योंकि colourspaces को सही ढंग से परिभाषित नहीं किया गया था। -Colorspace IM विकल्प देखें।
रिविमे

2

जैसा कि यह पृष्ठ वैकल्पिक उपकरणों को भी सूचीबद्ध करता है, मैं xpdf का उल्लेख करूंगा जिसमें कमांड लाइन उपकरण तैयार हैं जो लिनक्स / विंडोज / मैक के लिए संकलित हैं। पारदर्शिता का समर्थन करता है। व्यावसायिक उपयोग के लिए स्वतंत्र है - घोस्टस्क्रिप्ट के विपरीत जो वास्तव में अपमानजनक मूल्य है।

एक विशाल पीडीएफ फाइल पर एक परीक्षण में यह घोस्टस्क्रिप्ट से 7.5% तेज था।

(इसमें पीडीएफ टू टेक्स्ट और HTML कन्वर्टर्स भी हैं)


मैंने अब इसे थोड़ी देर के लिए इस्तेमाल किया है और यह ठीक काम करता है। सामान्य तौर पर यह घोस्टस्क्रिप्ट की तुलना में थोड़ा धीमा होता है, हालांकि उच्च रिज़ॉल्यूशन पर। लेकिन छवियां बहुत अच्छी लगती हैं (हालांकि थोड़ा गहरा) और एंटी-अलियासिंग जो मुझे भूतप्रेत में काम करने के लिए मिल सकता है xpdf में बहुत अच्छा काम करता है!
TheStoryCoder


1

मेरा समाधान बहुत सरल और अधिक प्रत्यक्ष है। कम से कम यह मेरे पीसी पर इस तरह से काम करता है (निम्नलिखित स्पेक्स के साथ):

me@home: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

साथ में

me@home: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

तो, यहाँ मैं अपने पर चला रहा हूँ file.pdf:

me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png

हाँ, यह वही है जो ओपी ने शुरू में कोशिश की, लेकिन कुछ और
गलत

0

आप PDF के पहले पेज को अन्य टूल्स से अलग किए बिना ImageMagick का उपयोग कर सकते हैं। बस करो

convert -density 288 cover.pdf[0] -resize 25% cover.png


यहां मैं नाममात्र घनत्व 400% (72 * 4 = 288) बढ़ाता हूं और फिर 1/4 (25%) द्वारा आकार परिवर्तन करता हूं। यह परिणामी png के लिए एक बेहतर गुणवत्ता देता है।

हालाँकि, यदि PDF CMYK है, तो PNG उसका समर्थन नहीं करता है। इसे sRGB में बदलना होगा, खासकर अगर इसमें पारदर्शिता हो, क्योंकि घोस्टस्क्रिप्ट अल्फा के साथ CMYK को संभाल नहीं सकता है।

convert -density 288 -colorspace sRGB -resize 25% cover.pdf[0] cover.png
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.