2009-02-18 14 views
7

में छवियों की एक सूची का आकार बदलें मैं निर्देशिका में सभी छवियों की एक सूची का आकार बदलना चाहता हूं। इसे प्राप्त करने के लिए, मैं imagemagick से convert का उपयोग करता हूं। मैं आकार बदलने के लिए अगर वहाँ एक भी आदेश पंक्ति में इस लक्ष्य को हासिल करने के लिए एक विधि हैलाइन कमांड

image1.jpg 
image2.jpg 
... 

में
image1-resized.jpg 
image2-resized.jpg 
... 

मैं सोच रहा था चाहते हैं। एक सुरुचिपूर्ण समाधान अक्सर इस मामले में न केवल उपयोगी हो सकता है।

संपादित करें:

मैं एक गैरस्क्रिप्ट की तरह समाधान चाहते हैं अर्थात्। लूप के बिना।

उत्तर

6
ls *.jpg|sed -e 's/\..*//'|xargs -I X convert X.jpg whatever-options X-resized.jpg 

आप समाप्त कर सकते हैं sed और विस्तार-सामान्य हो अगर आप थोड़ा अलग अंतिम फ़ाइल नाम स्वीकार करने के इच्छुक हैं, 'resized-image1.jpg' के बजाय ' Image1-resized.jpg ':

ls|xargs -I X convert X whatever-options resized-X 
+0

इस चाल के बारे में मैं सोच रहा था की तरह था का उपयोग, अच्छा एक है परिवर्तित करने में सक्षम था;) – claf

+0

सही! मैं यही चाहता था! Sed पाइप के बिना सही होगा, कोई फर्क नहीं पड़ता कि आकार बदलना –

10

आप उन्हें 800x600 आकार परिवर्तन करना चाहते हैं:

for file in *.jpg; do convert -resize 800x600 -- "$file" "${file%%.jpg}-resized.jpg"; done 

(बैश में काम करता है)

+0

+1 यह बिल्कुल वही बात मैं –

2

अपनी छवि फ़ाइलों अलग एक्सटेंशन है, तो:

 
for f in *; do convert -resize 800x600 -- "$f" "${f%.*}-resized.${f##*.}"; done 
4

GNU Parallel छोरों के लिए की तुलना में और भी आसान है, और यह अक्सर तेज है:

    :

    parallel convert -resize 800x600 -- "{}" "{.}-resized.jpg" ::: *.jpg 
    

    कुछ बातें यहाँ छोड़ दिया करने के लिए हो रहा है, है ना से

  • ::: *.jpg का अर्थ है प्रत्येक जेपीजी फ़ाइल
  • {.} का मतलब है कि बिना मौजूदा फ़ाइल नाम डालें प्रत्यय (.jpg)
  • {} साधन वर्तमान फ़ाइल नाम
  • parallel साधन समानांतर में निम्न आदेश कई बार चलाने डालें। यह आपके कंप्यूटर के कोर की संख्या से मेल खाने के लिए समानांतर में अधिकतम करने का चयन करेगा। चूंकि प्रत्येक व्यक्ति समाप्त होता है, यह तब तक लॉन्च होगा जब तक सभी जेपीजी फाइलों को परिवर्तित नहीं किया जाता है।

यह प्रत्येक फ़ाइल के लिए convert --resize 800x600 -- foo.jpg foo-resized.jpg कमांड चलाता है। --- के साथ फ़ाइल नाम शुरू होने पर, रोक प्रसंस्करण झंडे में कनवर्ट करने के लिए कहता है।

पीएस अपने Mac पर मैं Homebrew स्थापित किया है, तो मैं समानांतर स्थापित करने और साथ

brew install parallel 
brew install imagemagick 
+0

अच्छा जवाब है - यह जाने का रास्ता है। सुनिश्चित नहीं है कि '- -' हिस्सा क्या है। –