जवाबों:
आपका सबसे अच्छा शर्त Imagemagick का उपयोग करना होगा
मैं वास्तविक उपयोग में विशेषज्ञ नहीं हूं, लेकिन मुझे पता है कि आप इससे संबंधित कुछ भी छवि बहुत सुंदर कर सकते हैं!
एक उदाहरण है:
convert image.png image.jpg
और यह परिवर्तित छवि बनाने के साथ ही मूल रखेगा। बैच के लिए के रूप में। मुझे लगता है कि आपको मोग्रिफ़ टूल (इमेजमागिक में उसी कमांड लाइन से) का उपयोग करने की आवश्यकता है। ध्यान रखें कि यह पुरानी छवियों को अधिलेखित करता है।
आदेश है:
mogrify -format jpg *.png
mogrify -format jpg -background black -flatten *.png
mogrify -format jpeg img.png
फाइल बॉक्स पर @ केविनकोक्स 2 फाइलें होने के बाद और file img.*
एक पीएनजी, मूल अछूता, और एक नया एमपीईजी एक रिपोर्ट करता है। तो इस मामले में मूल फ़ाइलों को अधिलेखित नहींmogrify
करता है ।
mogrify
प्रलेखन: " यह उपकरण समान है convert
, सिवाय इसके कि मूल छवि फ़ाइल ओवरराइट है (जब तक आप के साथ फ़ाइल प्रत्यय बदल -format कोई भी परिवर्तन आप अनुरोध के साथ विकल्प)। "
मेरे पास कुछ और उपाय हैं।
सबसे सरल समाधान सबसे पहले से ही पोस्ट किया गया है। लूप के लिए एक साधारण बैश।
for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
किसी कारण के लिए मैं बैश में छोरों से बचने के लिए हूं, इसलिए यहां नाम-मैन्लिंग के लिए बैश का उपयोग करते हुए एक और अधिक अस्पष्ट एक्सग्रेस दृष्टिकोण है।
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
जो मैं उपयोग करता हूं। यह एक साथ कई कार्य चलाने के लिए GNU पैरेलल का उपयोग करता है, जिससे आपको एक प्रदर्शन को बढ़ावा मिलता है। यह कई प्रणालियों पर डिफ़ॉल्ट रूप से स्थापित है और लगभग निश्चित रूप से आपके रेपो में है (यह लगभग एक अच्छा कार्यक्रम है)।
ls -1 *.png | parallel convert '{}' '{.}.jpg'
आपके द्वारा की जाने वाली प्रक्रियाओं की संख्या के अनुसार नौकरियों की संख्या में कमी आती है। मैंने अपने दोहरे-कोर सिस्टम पर 3 नौकरियों का उपयोग करके बेहतर सीपीयू उपयोग पाया।
ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
और अगर आप कुछ आँकड़े चाहते हैं (एक ईटीए, नौकरियां पूरी हुईं, औसत समय प्रति काम ...)
ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
यदि आप GNU समानांतर का उपयोग कर रहे हैं तो एक वैकल्पिक वाक्यविन्यास भी है।
parallel convert '{}' '{.}.jpg' ::: *.png
और कुछ अन्य संस्करणों के लिए एक समान वाक्यविन्यास (डेबियन सहित)।
parallel convert '{}' '{.}.jpg' -- *.png
done
लूप के लिए इसके अंत में आवश्यकता है । इसके अलावा, समानांतर सामान के लिए, आप ls
एक निर्माण के साथ उस और पाइप का उपयोग करने से बच सकते हैं: parallel -j 3 --eta convert '{}' '{.}.jpg' ::: *.png
( यहां देखें )
ls
खुद के लिए विधि के साथ रहूंगा क्योंकि यह मेरे लिए अधिक समझ में आता है।
--
बजाय :::
) के साथ एक अलग संस्करण है - और फिर भी, यह निराशाजनक रूप से जीएनयू समानांतर की कुछ विशेषताओं का अभाव है।
convert
कई लिनक्स वितरणों पर पाया जाने वाला कमांड ImageMagick सूट के हिस्से के रूप में स्थापित है। यहाँ convert
निर्देशिका में सभी PNG फ़ाइलों को चलाने और उस डबल एक्सटेंशन समस्या से बचने के लिए बैश कोड है:
for img in *.png; do
filename=${img%.*}
convert "$filename.png" "$filename.jpg"
done
for f in *.png; do convert "$f" "${f/%png/jpg}"; done
उन लोगों के लिए जो केवल सबसे सरल आदेश चाहते हैं:
मूल फ़ाइलें कनवर्ट करें और रखें :
mogrify -format jpg *.png
मूल फ़ाइलों को कनवर्ट करें और निकालें :
mogrify -format jpg *.png && rm *.png
Kinda पार्टी के लिए देर से, लेकिन सिर्फ क्ली के साथ बहुत सहज नहीं होने वाले किसी व्यक्ति के लिए भ्रम की स्थिति को साफ करने के लिए, यहां एक सुपर डम्बल-डाउन संदर्भ और स्पष्टीकरण है।
उदाहरण निर्देशिका
bar.png
foo.png
foobar.jpg
सभी मूल png फ़ाइलों को रखता है और साथ ही साथ jpg फ़ाइलों को भी बनाता है।
mogrify -format jpg *.png
नतीजा
bar.png
bar.jpg
foo.png
foo.jpg
foobar.jpg
व्याख्या
-format
विकल्प के अपवाद के साथ । (से साइट : This tool is similar to convert except that the original image file is overwritten (unless you change the file suffix with the -format option)
)- format
विकल्प निर्दिष्ट करता है कि आपको फ़ॉर्मेट बदले किया जाएगा, और अगले तर्क प्रकार (इस मामले में, JPG) की जरूरत है।*.png
इनपुट फाइलें (.png में समाप्त होने वाली सभी फाइलें) हैं।सभी png फ़ाइलों को jpg में रूपांतरित करता है, मूल को हटाता है।
mogrify -format jpg *.png && rm *.png
नतीजा
bar.jpg
foo.jpg
foobar.jpg
व्याख्या
&&
एक बूलियन ऑपरेटर है। संक्षेप में:
0
साधन की कोई त्रुटि नहीं है।&&
करता है , कोई त्रुटि नहीं थी , तो सही हिस्सा ही प्रदर्शन किया जाएगा । यह उपयोगी है क्योंकि आप उन्हें परिवर्तित करने में कोई त्रुटि होने पर सभी मूल फ़ाइलों को हटाना नहीं चाहेंगे।rm
आदेश फ़ाइलों को हटा देता।अब यहाँ लोग हैं, जो करने के लिए कुछ उपहार है कर रहे हैं CLI के साथ सहज।
यदि आप फ़ाइलों को परिवर्तित करते समय कुछ आउटपुट चाहते हैं:
for i in *.png; do mogrify -format jpg "$i" && rm "$i"; echo "$i converted to ${i%.*}.jpg"; done
सभी उपनिर्देशिकाओं में सभी पीएनजी फाइलें बदलें और हर एक के लिए आउटपुट दें:
find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; echo "Converted $i to ${i%.*}.jpg"; done
सभी उपनिर्देशिकाओं में सभी पीएनजी फ़ाइलों को परिवर्तित करें, सभी परिणामी जेपीजी को all
निर्देशिका में डालें , उन्हें संख्या दें, मूल पीएनजी फाइलें निकालें, और प्रत्येक फाइल के लिए आउटपुट प्रदर्शित करें क्योंकि यह होता है:
n=0; find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; fn="all/$((n++)).jpg"; mv "${i%.*}.jpg" "$fn"; echo "Moved $i to $fn"; done
while read
भाग से छुटकारा पा लें (इसे बदलें या इसे सभी को एक साथ हटा दें) ...
find . -name "*.png" -print0 | xargs -0 mogrify -format jpg -quality 50
*.jpg
मूल फ़ाइलों के बगल में परिणामी फ़ाइलों को छोड़ देता है *.png
, दिखाता है कि फ़ाइल आकार / गुणवत्ता को कैसे कम किया जाए और निर्देशिका या फ़ाइल नाम में किसी भी विषम वर्ण के कारण टूटना नहीं है।
मेरा त्वरित समाधान
for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done
for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done
:। यह पूरी तरह से अनावश्यक ls
, grep
और sed
कॉल से बचा जाता है (और echo
, लेकिन IIRC जो एक बैश बिलिन है और इसलिए इसका कोई / बहुत कम प्रदर्शन प्रभाव नहीं होगा), और दो पाइपों और दो उपधाराओं से छुटकारा पाता है, और इसमें कम टाइपिंग शामिल है। यह थोड़ा और अधिक पोर्टेबल है, क्योंकि सभी संस्करण ls
पार्स करने के लिए सुरक्षित नहीं हैं।
कई साल बहुत देर हो चुकी है, इस उद्देश्य के लिए विशेष रूप से एक png2jpeg उपयोगिता है, जिसे मैंने लिखा था।
@Marcin द्वारा कोड को अपनाना:
#!/bin/sh
for img in *.png
do
filename=${img%.*}
png2jpeg -q 95 -o "$filename.jpg" "$filename.png"
done
बैच प्रसंस्करण के लिए:
for img in *.png; do
convert "$img" "$img.jpg"
done
आप फ़ाइल नाम जैसे image1.png.jpg के साथ समाप्त करेंगे।
यह बाश में काम करेगा, और शायद बोर्न में। मैं अन्य गोले के बारे में नहीं जानता, लेकिन केवल अंतर लूप सिंटैक्स होगा।
जब फ़ाइलों को एक से अधिक निर्देशिका में बदलने के लिए मैं इसका उपयोग करता हूं। मेरा मूल एक पीएनजी के लिए TGA था
find . -name "*.tga" -type f | sed 's/\.tga$//' | xargs -I% convert %.tga %.png
अवधारणा find
आप की जरूरत फ़ाइलों है, विस्तार से पट्टी तो इसे वापस के साथ जोड़ें xargs
। तो PNG से JPG के लिए, आप एक्सटेंशन बदलेंगे और अल्फा चैनल से निपटने के लिए एक अतिरिक्त काम करेंगे, अर्थात् बैकग्राउंड सेट करना (इस उदाहरण में सफ़ेद, लेकिन आप इसे बदल सकते हैं) फिर छवि को समतल करें
find . -name "*.png" -type f | sed 's/\.png$//' | xargs -I% convert %.png -background white -flatten %.jpg