Imagemagick के साथ एक निर्देशिका में सभी छवियों को कैसे घुमाएं?


18

मैं एक निर्देशिका से मेल खाने वाली निर्देशिका में सभी छवियों को घुमाना चाहता हूं।

अब तक मेरे पास:

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 file+'_rotated'.JPG
done

लेकिन यह कोई उत्पादन नहीं देता है?

जवाबों:


20

आपके कोड के साथ काफी कुछ समस्याएं हैं। सबसे पहले, आप ls को पार्स कर रहे हैं जो एक बैड आइडिया है । आपको चर को संदर्भित करने की भी आवश्यकता है $fileक्योंकि आप इंगित करते हैं और आपको इसे भी उद्धृत करना चाहिए ताकि यह रिक्त स्थान पर न टूटे । आप घोषणा कर रहे हैं numलेकिन इसका उपयोग कभी नहीं किया जाता है। एक सुरक्षित तरीका होगा:

find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
  convert "$file" -rotate 90 "$file"_rotated.JPG
done

यह तब भी समस्या होगी जब आपकी फ़ाइलों में नई सुर्खियाँ हों, लेकिन कम से कम आपके मार्ग में रिक्त स्थान न हों।

यदि फाइलें एक ही डायरेक्टरी में हैं, तो ग्लोबिंग का उपयोग करके इसे और सरल बनाया जा सकता है। आप foo_rotated.JPG1इसके बजाय बनाने के लिए पैरामीटर विस्तार का भी उपयोग कर सकते हैं foo.JPG_rotated.JPG:

for file in /tmp/p/DSC*.JPG; do
  convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done

2
आपका तरीका बनाएगा original_filename.JPG_rotated.JPG"। जोड़ने "${file%.JPG}"_rotated.JPG से अधिक उपयुक्त इम्हो होगा। चीयर्स!
वैलेंटाइन बजरमी

1
@ val0x00ff बिल्कुल (और मैंने आपके उत्तर को उकेरा जो सुझाव देता है कि)। मैंने सिर्फ वही बात दोहराई जो ओपी अधिक चमकती त्रुटियों को ठीक कर रहा था।
terdon

ठंडा! मैंने अभी आपकी आज्ञा को थोड़ा संशोधित किया है।
वैलेंटाइन बजरमी

11

mogrify -rotate 90 *.jpgImagemagick के साथ सभी छवियों को घुमाने के लिए बेहतर वन-लाइनर

mogrify -rotate 90 /tmp/p/DSC*.JPGनिर्देशिका में सभी .JPGशुरुआत को घुमाएगीDSCp

मोगरिफ़ ( इमेजमैजिक का हिस्सा) इससे भिन्न Convertहै कि यह मूल फ़ाइल को संशोधित करता है http://www.imagemagick.org/script/mogrify.php


11

पीई (पैरामीटर विस्तार) का उपयोग करने वाली एक सरल विधि है

for f in /tmp/p/DSC*.JPG
do
  convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done

1
यह ध्यान दिया जाना चाहिए कि वहाँ कुछ भी bashविशिष्ट नहीं है , यह पूरी तरह से मानक POSIX श सिंटैक्स है।
स्टीफन चेज़लस

6

पार्स न करेंls और lsयहां आवश्यक नहीं है। इसके अलावा, यदि आप रिक्त स्थान रखते हैं तो आपको अपने चर को उद्धृत करना चाहिए।

for file in *.JPG; do
  convert -rotate 90 "$file" rotated_"$file"
done

अंतरिक्ष ... या टैब्स, या न्यूलाइन या तारांकन या प्रश्न चिह्न या चौकोर ब्रैकेट ...
स्टीफन चेज़लस

6

नहीं एक छवि समाधान, लेकिन

sips -r 90 *.JPG

.JPG 90 डिग्री में समाप्त होने वाली सभी छवियों को घुमाएगा। यह एक अच्छा लाइनर है।


1
fwiw, यह मूल चित्रों को अधिलेखित करता है।
don_crissti

0

मुझे फ़ाइल को संदर्भित करने की आवश्यकता है $file, अर्थात

for file in `ls /tmp/p/DSC*.JPG`; do
  convert $file -rotate 90 $file+'_rotated'.JPG
done

0

आप इस कोड को ubuntu में कॉपी / पेस्ट कर सकते हैं, और इसे "rot.sh" के रूप में सहेज सकते हैं

#!/bin/bash -e

CUR_DIR=`pwd`
cd "${1}"

for file in *.jpg; do
    convert "${file}" -rotate 90 "${file}";
done

cd CUR_DIR

इस फ़ाइल को सहेजने के बाद, इसे टर्मिनल का उपयोग करके चलाएं ./rotate.sh folder_containing_images

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