ইমেজম্যাগিকের সাহায্যে কোনও ডিরেক্টরিতে সমস্ত চিত্র কীভাবে ঘোরানো যায়?


18

আমি একটি প্যাটার্নের সাথে মেলে এমন একটি ডিরেক্টরিতে সমস্ত চিত্র ঘোরানো চাই।

এখন পর্যন্ত আমার কাছে রয়েছে:

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

কিন্তু কোন আউটপুট দেয়?

উত্তর:


20

আপনার কোড নিয়ে বেশ কয়েকটি সমস্যা রয়েছে। প্রথমত, আপনি এলএস পার্স করছেন যা একটি খারাপ ধারণা । আপনার উল্লেখ করার সাথে $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 করা আরও উপযুক্ত imho হবে। চিয়ার্স!
ভ্যালেন্টাইন বজরামি

1
@ val0x00ff একেবারে (এবং আমি আপনার উত্তরটিকে অগ্রাহ্য করেছি যা এটি প্রস্তাব করে)। আমি কেবল ওপি আরও সঠিক উদ্ঘাটিত ত্রুটিগুলি ঠিক করতে ঠিক করছিলাম repeated
টেরডন

শান্ত! আমি কেবল আপনার আদেশটি কিছুটা পরিবর্তন করেছি।
ভ্যালেন্টাইন বজরামি

11

mogrify -rotate 90 *.jpgইমেজম্যাগিকের সাথে সমস্ত চিত্র ঘোরানোর জন্য আরও ভাল ওয়ান-লাইনার

mogrify -rotate 90 /tmp/p/DSC*.JPG সব ঘোরান Infact হবে .JPGসংগে DSCমধ্যে pডিরেক্টরি

Mogrify (ImageMagick এর অংশ) থেকে পৃথক 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সুনির্দিষ্ট কিছু নেই, এটি পুরোপুরি স্ট্যান্ডার্ড পসিক্স সিন সিনট্যাক্স।
স্টাফেন চেজেলাস

6

বিশ্লেষণ করবেন নাls এবং lsএখানে প্রয়োজন হয় না। তদুপরি, আপনার ভেরিয়েবলগুলির স্পেস রয়েছে এমন ক্ষেত্রে আপনার উদ্ধৃতি দেওয়া উচিত।

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

স্পেস ... বা ট্যাব, বা নিউলাইন বা অ্যাসিস্ট্রিক বা প্রশ্ন চিহ্ন বা বর্গাকার বন্ধনী ...
স্টাফেন চেজেলাস

6

কোনও চিত্রকল্পিক সমাধান নয়, তবে

sips -r 90 *.JPG

.JPG 90 ডিগ্রীতে শেষ হওয়া সমস্ত চিত্র ঘোরানো হবে। এটি একটি ভাল ও লাইনার


1
নতুনভাবে, এটি মূল চিত্রগুলি ওভাররাইট করে।
don_crissti


0

আপনি এই কোডটি উবুন্টুতে অনুলিপি / অনুলিপি করতে পারেন এবং এটিকে "রোটেট.শ" হিসাবে সংরক্ষণ করতে পারেন

#!/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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.