JPEG से PDF प्रारूप में कई छवि फ़ाइलों को परिवर्तित करना


50

मैं jpeg से कुछ फाइलों को पीडीएफ में बदलना चाहता हूं। मैं निम्नलिखित कमांड का उपयोग कर रहा हूं।

$ convert image1.jpg image1.pdf 

लेकिन मेरे पास 100 चित्र हैं। मुझे उन सभी को संबंधित pdfs में कैसे बदलना चाहिए?

मैंने कोशिश की

$ convert image*.jpg image*.pdf 

यह काम नहीं करता है।


जवाबों:


62

बैश में:

for f in *.jpg; do
  convert ./"$f" ./"${f%.jpg}.pdf"
done

1
किसी विशेष कारण से आप रूपांतरण के आर्गन्स में "./" क्या यह एक सामान्य अच्छा अभ्यास है?
रहमू

4
@ इल्मू: हाँ, यह एक अच्छा अभ्यास है, क्योंकि फ़ाइल नाम -समस्याओं के साथ शुरू होता है, अन्यथा।
enzotib

3
यह काम करता है, लेकिन mogrifyबहुत कम टाइपिंग है। मेरा जवाब देखिए।
cjm

+1 क्योंकि यह तकनीकी रूप से सही है और बैश के नुकसान से बचा जाता है, लेकिन -1 क्योंकि मोग्रिइफ़ इमेज को बैचने का इमेजमैजिक तरीका है। इसलिए मुझसे कोई वोट नहीं।
बेनोइट

@aculich: आपके डाउनवोट के लिए धन्यवाद, लेकिन आपने एक गलत विचार किया, देखते हैं कि लूप के लिए "तर्क बहुत लंबा" त्रुटि क्यों नहीं बढ़ाता है?
enzotib

56

इसके लिए आप mogrifyकमांड का उपयोग कर सकते हैं । आम तौर पर, यह फ़ाइलों को जगह में संशोधित करता है, लेकिन स्वरूपों को परिवर्तित करते समय, यह एक नई फ़ाइल लिखता है (बस नए प्रारूप से मिलान करने के लिए एक्सटेंशन बदल रहा है)। इस प्रकार:

mogrify -format pdf -- *.jpg

(एनज़ोटिब की तरह ./*.jpg, --किसी भी अजीब फ़ाइलनाम को स्विच के रूप में व्याख्या करने से रोकता है। अधिकांश कमांड --का अर्थ है "इस बिंदु पर विकल्पों की तलाश करना बंद करें"।)


+1, मेरा जवाब केवल बैश के बारे में था, अच्छी तरह से नहीं जानते ImageMagick।
enzotib

के mogrifyबजाय उपयोग करने के लिए अच्छा विचार है convert। यह 100 फाइलों के लिए काम करेगा, लेकिन ग्लोबिंग के साथ *.jpgहजारों फाइलों का उपयोग नहीं करता है; के साथ एक साधारण एक लाइनरfind में आदेश के संयोजन के द्वारा किया जा सकता है ।
अकुलिच

कैसे कन्वर्ट करने के लिए दोनों *.jpg और *.pngएक भी करने के लिए फ़ाइलों *.pdf? ध्यान दें कि वे क्रमांकित फ़ाइलें हैं (उदाहरण के लिए, 1.jpg 2.png 3.png 4.jpg) और उस आदेश को पीडीएफ आउटपुट में बनाए रखा जाना चाहिए / संरक्षित किया जाना चाहिए।
नाइटी के बारे में अखरोट

एक समाधान के रूप: परिवर्तित सब *.jpg'में रों *.pngचरण एक में s', और चरण 2 में अपने जवाब के बराबर प्रदर्शन ...
Natty के बारे में अखरोट के स्वाद का


24

तेज लेकिन असामान्य सिंटैक्स:

parallel convert '{} {.}.pdf' ::: *.jpg

समानांतर में चलाता है ( https://www.gnu.org/software/parallel/ का उपयोग करके )। मैंने convertअभी तक किसी भी मल्टी-थ्रेडिंग पर ध्यान नहीं दिया है, जो प्रभावी समानांतरकरण को सीमित करेगा। यदि यह आपकी चिंता है, तो मल्टी-थ्रेडिंग नहीं होने को सुनिश्चित करने के लिए एक विधि के लिए नीचे टिप्पणी में देखें।


1
यह रास्ता जीत से भरा है। यह ऑटो कोर की संख्या का आकलन करता है और कई कार्यों को चलाता है!
मेवोप्लप

1
यह विधि सबसे तेज है।
शिवम

1
समानांतर शक्ति है, इमेजमाजिक के साथ संयुक्त समानांतर सुपरपावर है। मुझे महाशक्ति पसंद है।
चचेरे भाई

2
पार्टी के लिए थोड़ा देर से यहाँ, लेकिन नया (संभवत: जब यह जवाब नहीं लिखा गया था) ImageMagick के संस्करण बहु-थ्रेडेड हैं, और समानांतर में चलने पर बुरी तरह से इंटरैक्ट करेंगे। इसे parallelपर्यावरण चर को सेट करके अक्षम किया जा सकता है (यदि एप्लिकेशन-स्तरीय समांतरकरण जैसे कि GNU के साथ ) MAGICK_THREAD_LIMIT=1
zebediah49

इस परिणाम के लिए ImageMagick का उपयोग करने से पीढ़ी की हानि और खराब प्रदर्शन होता है। इस पेज पर कहीं और img2pdf उन समस्याओं से बचा जाता है।
रॉबर्ट फ्लेमिंग

16

https://gitlab.mister-muffin.de/josch/img2pdf

ImageMagick से जुड़े सभी प्रस्तावित समाधानों में, JPEG डेटा पूरी तरह से डीकोड हो जाता है और फिर से इनकोड हो जाता है। यह पीढ़ी के नुकसान के साथ-साथ प्रदर्शन "दस से सौ" गुना से भी बदतर है img2pdf

साथ स्थापित किया जा सकता pip img2pdf, बशर्ते आप निर्भरता (जैसे है apt-get install python python-pil python-setuptools libjpeg-devया yum install python python-pillow python-setuptools)।


3
सही है। आप परीक्षण कर सकते हैं कि एक राउंडट्रिप एक जेपीईजी फ़ाइल को आदेशों जैसे बदल देती है convert some.jpg -format pdf -compress jpeg generated.pdf ; pdfimages -j generated.pdf generated.pdf ; diff -sq some.jpg generated.pdf-000.jpg। IMHO यह उत्तर अधिक उत्थान के योग्य है। वास्तव में, convertयहाँ विफल रहता है, img2pdfइस तरह की परीक्षा उत्तीर्ण करता है और यहां तक ​​कि चित्र आकार, पृष्ठ आकार, आदि सेट करने के लिए कई विकल्प शामिल हैं जो उत्पन्न पीडीएफ को आपकी आवश्यकताओं को पूरा करने के लिए।
स्टीफन गौरिचोन

3
img2pdfउबंटू 16.04 नियमित रिपॉजिटरी में उपलब्ध है, pipवहां मैनुअल संचालन की कोई आवश्यकता नहीं है , और आप अपडेट का लाभ उठाते हैं।
स्टीफन गौरिचोन

1
जिस समय प्रश्न पूछा गया था (और स्वीकृत उत्तर) img2pdf मौजूद नहीं था। लेकिन अब मंगलवार img2pdf स्पष्ट रूप से एक बेहतर जवाब है।
किमीकपलान

13

यहां एक तरीका है जो उपरोक्त सुझावों में से एक सरल, कुशल, मजबूत कमांड लाइन में सर्वश्रेष्ठ को जोड़ती है:

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +

यह फ़ाइल नाम के साथ ठीक काम करता है जो एक -रिक्त स्थान से शुरू होता है या होता है। नोट का उपयोग करें -inameजो कि केस-असंवेदनशील संस्करण है, -nameइसलिए यह .JPGबस और साथ ही काम करेगा .jpg

यह वाइल्डकार्ड के findसाथ शेल ग्लोबिंग के बजाय फ़ाइल सूची प्राप्त करने के लिए उपयोग करता है *.jpgजिसके परिणामस्वरूप कुछ सिस्टम पर 'तर्क सूची बहुत लंबी' त्रुटि हो सकती है। हालांकि @enzotib एक टिप्पणी में इंगित करता है, लूप के लिए ग्लोबिंग का उपयोग करने का व्यवहार कमांड के तर्कों की तुलना में अलग है

इसके अलावा, findउपनिर्देशिका को संभालेंगे, जबकि शेल ग्लोबिंग तब तक नहीं होगा जब तक आपके पास शेल-विशिष्ट विशेषताएं नहीं होंगी जैसे कि **/*jpgzsh में पुनरावर्ती ग्लोबिंग सिंटैक्स।

संपादित करें: मैंने सोचा था कि मैं इसके बारे में एक और उपयोगी विशेषता जोड़ूंगा , findजो मैंने @ImmariKaronen द्वारा एक टिप्पणी पढ़ने के बाद सोचा था कि कमांड को फिर से चलाना और केवल पहले से बदल चुकी फ़ाइलों को परिवर्तित करना।

पहले पास पर आप touchकन्वर्ट खत्म होने के बाद टाइमस्टैम्प फाइल कर सकते हैं ।

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp

फिर उन फ़ाइलों के सबसेट पर काम -newer timestampकरने के लिए findअभिव्यक्ति में जोड़ें , जिनका अंतिम-संशोधित समय टाइमस्टैम्प फ़ाइल की तुलना में नया है। प्रत्येक रन के बाद टाइमस्टैम्प फ़ाइल को अपडेट करना जारी रखें।

find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp

यह मेकफाइल का सहारा लेने से बचने का एक आसान तरीका है (जब तक कि आप पहले से ही एक का उपयोग नहीं कर रहे हैं) और यह एक और अच्छा कारण है कि findजब भी संभव हो इसका उपयोग करने लायक हो ... यह संक्षिप्त रहते हुए बहुमुखी अभिव्यक्ति है।


इस परिणाम के लिए ImageMagick का उपयोग करने से पीढ़ी की हानि और खराब प्रदर्शन होता है। इस पेज पर कहीं और img2pdf उन समस्याओं से बचा जाता है।
रॉबर्ट फ्लेमिंग

8

आप इसे convertसीधे कर सकते हैं । यह कमांड लाइन प्रोसेसिंग के बारे में ImageMagicks साइट के निचले भाग में पाया जाना है ।

convert *.jpg +adjoin page-%d.pdf

4
या convert *.jpg -adjoin output.pdfएक संयुक्त पीडीएफ के लिए
Ninjagecko

2
इस परिणाम के लिए ImageMagick का उपयोग करने से पीढ़ी की हानि और खराब प्रदर्शन होता है। इस पेज पर कहीं और img2pdf उन समस्याओं से बचा जाता है।
रॉबर्ट फ्लेमिंग

7

मैंने कुछ इसी तरह के लिए निम्नलिखित मेकफाइल का उपयोग किया है:

SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))

all: $(PNG)

%.png: origs/%.svg
    convert -resize "64x" $< $@


clean: 
    rm $(PNG)

अब मैं बस चला सकता हूं makeऔर मुझे हर एसवीजी फाइल के लिए पीएनजी फाइलें मिलती हैं जो चारों ओर स्थित हैं।

संपादित करें

के रूप में अनुरोध किया:

  • वाइल्डकार्ड्स उत्पत्ति में सभी svgs की एक सूची बनाता है /
  • pathsubst इस सूची को लेता है और png फ़ाइल नामों (विभिन्न फ़ोल्डर और एक्सटेंशन की सूची बनाता है। उदाहरण: origs/foo.svgबन जाता है foo.png)
  • नियम 1: all: $(PNG)परिभाषित करता है, कि लक्ष्य "सभी" सभी PNG पर निर्भर करता है
  • नियम 2: %.png: origs/%.svgपरिभाषित करता है, फ़ाइल $ X.png उत्पत्ति / $ X.svg पर निर्भर करती है और कॉल करके उत्पन्न की जा सकती है convert ... $< $@
    • $< निर्भरता है और
    • $@ लक्ष्य नाम है
  • RULE 3: सिर्फ सफाई के लिए है

2
एक बंद कार्य के लिए, मेकफिल बनाना संभवतः ओवरकिल है, लेकिन अगर आप कभी भी कुछ पीडीएफ को बदलने की योजना बनाते हैं, तो makeफिर से टाइप करने से उन लोगों को फिर से जोड़ा जाएगा, और केवल उन पीडीएफ को बदल दिया जाएगा जो बदल गए हैं।
इल्मरी करोनें २४'१२

क्या आप यह समझाना चाहेंगे कि वाइल्डकार्ड, उत्पत्ति, पेट्सबस्ट क्या है, $ और% की व्याख्या कैसे की जाती है और $ <$ @? बाकी समझने में आसान है। :)
उपयोगकर्ता अज्ञात

का सहारा makeओवर-द जटिल है जब एक एक छोटे से लगता है सरल एक लाइनर चाल करेंगे।
23

@IlmariKaronen मैं मानता हूं कि एक मेकफाइल ओवरकिल है, लेकिन बाद के रनों पर संशोधित फ़ाइलों के केवल सबसेट को फिर से जोड़ने का एक तरीका अच्छा है। मैंने अपना उत्तर अपडेट करने के तरीके के साथ किया है findताकि आपके साथ केवल मेकफाइल का सहारा न लेना पड़े।
aculich

0

एक छोटी सी स्क्रिप्ट ट्रिक करेगी। (सोलारिस 10 पर ksh88 के साथ परीक्षण किया गया)

script.ksh

#!/bin/ksh

[[ $# != 1 ]] && exit 255 # test for nr of args

pdfname=$(sed -e 's/\(.*\)\.jpg/\1\.pdf/' <(echo $"1")) #replace *.jpg with *.pdf
convert "$1" $pdfname

तब आप findस्क्रिप्ट निष्पादित करने के लिए दौड़ सकते हैं :

find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;

ध्यान दें कि मैंने script.kshऔर आपको जो findआदेश दिया था, उसमें OS और आपके द्वारा उपयोग किए जा रहे शेल पर अलग-अलग वाक्यविन्यास हो सकते हैं।


pdfname=${1%.*}.pdfफ़ाइल के एक्सटेंशन के साथ बदलता है pdf। यह विधि बहुत सरल है और भले ही फ़ाइल नाम में विशेष वर्ण हों। संबंधित नोट पर, चर प्रतिस्थापन के आसपास दोहरे उद्धरण जोड़ें।
गाइल्स का SO- बुराई से दूर रहना '

एक अलग स्क्रिप्ट लिखने का कोई कारण नहीं है जब यह सब एक साधारण एकल कमांड लाइन के साथ किया जा सकता है ।
23

0

MacOS उपयोगिता केSIPS   तहत MacOS (सिएरा), Apple की अंतर्निहित कमांड-लाइन उपयोगिता sipsऐप्पल की रेखापुंज-छवि उपयोगिताओं के सभी के लिए व्यापक पहुंच प्रदान करती है; इसका रूपांतरण शामिल करने के लिए निकला jpgहै pdf

उदाहरण के लिए, मौजूदा निम्न-रिज़ॉल्यूशन / छोटे आकार की jpgछवि 'cat.jpg'(आकार 8401 बाइट्स) से, निम्न कमांड-लाइन बनाता है 'cat.pdf', जिसमें रेज़र-रिज़ॉल्यूशन में कोई परिवर्तन नहीं होता है और फ़ाइल आकार का न्यूनतम विस्तार होता है:

$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1
$ ls -l cat.*
-rw-r--r--@ 1 <user redacted> <group redacted>  8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 <user redacted> <group redacted> 10193 Jun 18 07:22 cat.pdf

एडोब के PSDरेखापुंज-छवि प्रारूप में रूपांतरण   एक समान sipsमुहावरे एडोब-संगत *.psdफ़ाइलों को बनाता है

$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1
$ ls -l cat.jpg cat.psd
-rw-r--r--@ 1 Administration  staff    8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 Administration  staff  350252 Jun 18 07:37 cat.psd

हालाँकि 30-गुना फ़ाइल के आकार के विस्तार पर ध्यान दें, जो कि एडॉपस्टर psdरेखापुंज-प्रारूप के उपयोग के लिए परिचर है ।

पुस्तक उत्पादन   बड़े पैमाने पर पुस्तक उत्पादन करने में, सैकड़ों छवियों को शामिल करते हुए, जो कई स्वरूपों में दिए गए हैं, मेरे लिए एक सुविधाजनक कमांड-लाइन मुहावरे का उपयोग किया गया है ImageMagickउपयोगिताओं में शुद्ध रेखापुंज-छवि फ़ाइलों को बनाने के लिए उपयोग किया जाता pngहै (सभी मेटा-डेटा के साथ और रंग प्रोफ़ाइल छीन बाहर), तो का उपयोग sipsरंग प्रोफाइल और / या टिप्पणी के एक समान सेट बहाल करने के लिए, और प्रयोग sipsभी सबसे अधिक अंतिम आउटपुट फ़ाइलें उत्पन्न करने के लिए ( *.png, *.psd, या *.pdfफ़ाइलें)।


0

दुर्भाग्य से convertइससे पहले कि jpgआप उपयोग करने की जरूरत मूल की गुणवत्ता की कम से कम नुकसान के लिए छवि को बदलता है img2pdf, मैं इस आदेश का उपयोग करें:

1) यह किसी भी संकल्प या गुणवत्ता के नुकसान के बिना pdfहर jpgछवि से बाहर एक फ़ाइल बनाने के लिए :

ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

2) pdfपृष्ठों को एक में समेटना :

pdftk *.pdf cat output combined.pdf

3) और आखिरी में मैं एक OCRed टेक्स्ट लेयर जोड़ता हूं जो pdfs में स्कैन की गुणवत्ता को नहीं बदलता है ताकि उन्हें खोजा जा सके:

pypdfocr combined.pdf  

0

मुझे अपनी रूपांतरण प्रक्रिया में तेजी लाने के लिए रूपांतरण और समानांतर के लिए इमेजमाजिक के साथ हल मिला:

ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {}  ../{.}.PDF

0

एकाधिक फ़ाइलों को कनवर्ट करने का सबसे सरल तरीका है, लिनक्स टर्मिनल में फ़ाइल डायरेक्टरी में जाना और टाइप करना:

$ convert *.png mypdf.pdf

-1

यदि आप शायद केवल छवि फ़ाइलों का उपयोग करते हैं, तो आप कॉमिक बुक आर्काइव (.cbr, .cbz, .bbt, .cba, .cb7) का उपयोग करना चाहेंगे ।

  • यदि आप 7Z का उपयोग करते हैं तो फ़ाइल एक्सटेंशन (प्रत्यय) .cb7 का नाम बदलें
  • यदि आप ACE का उपयोग करते हैं तो .cba में फ़ाइल एक्सटेंशन (प्रत्यय) का नाम बदलें
  • यदि आप RAR का उपयोग करते हैं तो .cbr पर फ़ाइल एक्सटेंशन (प्रत्यय) का नाम बदलें
  • यदि आप TAR का उपयोग करते हैं तो फ़ाइल एक्सटेंशन (प्रत्यय) .cbt का नाम बदलें
  • यदि आप ज़िप का उपयोग करते हैं तो फ़ाइल एक्सटेंशन (प्रत्यय) .cbz का नाम बदलें

यह पीडीएफ की तुलना में बहुत अधिक लचीला है।

Under Linux you can use software like Comix, Evince, Okular and QComicBook.

https://secure.wikimedia.org/wikipedia/en/wiki/Comic_book_archive


1
नीच, क्योंकि इसका ओपी के सवाल से कोई लेना-देना नहीं है।
टॉगल करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.