ব্যাচ লিনাক্সে পিএনজিকে জেপিজিতে রূপান্তর করে


163

কেউ কি পিএনজির একগুচ্ছ লিনাক্সের জেপিজিতে রূপান্তর করার জন্য ভাল উপায় জানেন? (আমি উবুন্টু ব্যবহার করছি)।

একটি png2jpg বাইনারি যা আমি কেবল শেল স্ক্রিপ্টে ফেলে দিতে পারি তা আদর্শ হবে।

উত্তর:


237

আপনার সেরা বাজি ইমেজম্যাগিক ব্যবহার করা হবে

আমি প্রকৃত ব্যবহারে বিশেষজ্ঞ নই, তবে আমি জানি আপনি এটির সাথে সম্পর্কিত যে কোনও চিত্রই করতে পারেন!

একটি উদাহরণ:

convert image.png image.jpg

এবং এটি রূপান্তরিত চিত্র তৈরির পাশাপাশি আসল রাখবে। ব্যাচ হিসাবে। আমি মনে করি আপনাকে মোগ্রিফি সরঞ্জামটি ব্যবহার করতে হবে (চিত্রশিল্পে যখন একই কমান্ড লাইন থেকে)। মনে রাখবেন যে এটি পুরানো চিত্রগুলিকে ওভাররাইট করে।

আদেশটি হ'ল:

mogrify -format jpg *.png  

7
দুর্দান্ত, আমি ঠিক পরে ছিলাম এবং আবার ব্যবহার করব। যাইহোক, স্পষ্ট করার জন্য যেহেতু আমি বুঝতে পারিনি এটি হ'ল আপনি কী বোঝাতে চেয়েছিলেন: রূপান্তরটি পৃথক আউটপুট ফাইল উত্পন্ন করতে ব্যবহৃত হয়, মোগরিফাইটি মূল চিত্রটি পরিবর্তন করতে ব্যবহৃত হয়।

1
স্বচ্ছ পটভূমি সহ পিএনজি চিত্রগুলি সঠিকভাবে জেপিজিতে রূপান্তর করে না।
বিষ্ণু

4
পিএনজির স্বচ্ছ পটভূমিতে রূপান্তর করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:mogrify -format jpg -background black -flatten *.png
হাইপারকনট

3
আমার mogrify -format jpeg img.png2 টি ফাইল থাকার পরে আমার লিনাক্স বাক্সে কেভিনকক্স আপনার কাছে একটি পিএনজি, আসল ছোঁয়াচে থাকা file img.*এবং একটি নতুন জেপিগ রিপোর্ট করার পরে । সুতরাং এই ক্ষেত্রে আসল ফাইলগুলি ওভাররাইট mogrifyকরে না
নিউরিনো

4
mogrifyডকুমেন্টেশন থেকে : " এই সরঞ্জামটি আপনার অনুরোধের যে কোনও পরিবর্তনের সাথে convertমূল চিত্র ফাইলটি ওভাররাইট করা (যদি না আপনি ফর্ম্যাট বিকল্পটি ফাইলের প্রত্যয়টি পরিবর্তন না করেন ) ব্যতীত একই সাথে পরিচিত
is

82

আমার আরও কয়েকটি সমাধান রয়েছে।

সবচেয়ে সহজ সমাধানটি ইতিমধ্যে পোস্ট করা মতো। লুপের জন্য একটি সহজ বাশ।

for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done

কোনও কারণে আমি ব্যাশে লুপগুলি এড়ানোর ঝোঁক রাখি তাই এখানে নাম-ম্যাংলিংয়ের জন্য ব্যাশ ব্যবহার করে আরও একটি ইউনিক এক্সার্গ্স পদ্ধতির উপায় রয়েছে।

ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'

আমি যেটি ব্যবহার করি। এটি একযোগে একাধিক কাজ চালানোর জন্য জিএনইউ সমান্তরাল ব্যবহার করে, আপনাকে একটি পারফরম্যান্স বাড়া দেয়। এটি অনেকগুলি সিস্টেমে ডিফল্টরূপে ইনস্টল করা হয় এবং এটি প্রায় অবশ্যই আপনার রেপোতে থাকে (এটি একটি ভাল অনুষ্ঠানের আশেপাশে থাকে)।

ls -1 *.png | parallel convert '{}' '{.}.jpg'

আপনার যে প্রক্রিয়া রয়েছে তার সংখ্যার তুলনায় কাজের ডিফল্ট সংখ্যা। আমি আমার ডুয়াল-কোর সিস্টেমে 3 টি চাকরি ব্যবহার করে আরও ভাল সিপিইউ ব্যবহারের সন্ধান পেয়েছি।

ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'

এবং যদি আপনি কিছু পরিসংখ্যান চান (একটি ইটিএ, কাজ সমাপ্ত, প্রতি চাকরির গড় সময় ...)

ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'

আপনি যদি জিএনইউ সমান্তরাল ব্যবহার করে থাকেন তবে বিকল্প বিকল্প বাক্য গঠনও রয়েছে।

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

এবং কিছু অন্যান্য সংস্করণের জন্য (ডিবিয়ান সহ) অনুরূপ সিনট্যাক্স।

parallel convert '{}' '{.}.jpg' -- *.png

2
এর জন্য সঠিক ব্যাশ স্ট্রিং প্রসারণের জন্য +1, যদি আমি আপনাকে সমান্তরাল উল্লেখ করার জন্য আরও একটি উঁচুতে দিতে পারি তবে আমি করব। একটি টাইপো আছে, তবে - doneলুপের জন্য আপনার এটির শেষে দরকার । এছাড়াও, সমান্তরাল lsparallel -j 3 --eta convert '{}' '{.}.jpg' ::: *.png
স্টাফগুলির জন্য

ফিক্সড টাইপ এটি একটি দুর্দান্ত বাক্য গঠন যা আমি জানতাম না। আমি জানি না কোনটি আমি বেশি পছন্দ করি সম্ভবত একই কারণে আমি ব্যাশে লুপ ব্যবহার না করা পছন্দ করি। আমি সমাধানটি রেখেছি কারণ এটি সম্ভবত আরও "যথাযথ" উপায় তবে আমি সম্ভবত lsনিজের জন্য পদ্ধতিটি বদ্ধ থাকি কারণ এটি আমার কাছে আরও বোধগম্য।
কেভিন কক্স

1
... যদিও এটি লক্ষ করা উচিত যে বাক্য গঠনটি কেবল GNU সমান্তরালে কাজ করে। কিছু লিনাক্স ডিস্ট্রোতে প্যাকেজ করা সমান্তরাল (যেমন ডেবিয়ান ও উবুন্টু) আসলে কিছুটা আলাদা সিনট্যাক্সের --পরিবর্তে ভিন্ন সংস্করণ (এর পরিবর্তে ব্যবহার করুন :::) - এবং তারপরেও হতাশ হয়ে জিএনইউ সমান্তরালের কিছু বৈশিষ্ট্যের অভাব রয়েছে।
দুষ্টুমি করা

(যদিও ডিস্ট্রোতে যারা GNU সমান্তরাল প্যাকেজ করে না তারা এখানে নির্দেশাবলী ব্যবহার করে উত্স থেকে খুব সহজেই এটি ইনস্টল করতে পারে )
অশুভসূচ

আমি মনে করি আমার তখনই এটি পরিবর্তন করা উচিত যাতে এটি যতটা সম্ভব সংস্করণের সাথে কাজ করে।
কেভিন কক্স

26

convertকমান্ড অনেক লিনাক্স ডিস্ট্রিবিউশন পাওয়া করে ImageMagick স্যুট অংশ হিসেবে ইনস্টল করা হয়। convertডিরেক্টরিতে সমস্ত পিএনজি ফাইলে চালানোর জন্য এবং সেই দ্বিগুণ এক্সটেনশান সমস্যাটি এড়াতে এখানে বাশ কোড রয়েছে :

for img in *.png; do
    filename=${img%.*}
    convert "$filename.png" "$filename.jpg"
done

8
রূপান্তর করার জন্য ম্যান পেজ অনুসারে: "রূপান্তর প্রোগ্রামটি ইমেজম্যাগিক (1) সরঞ্জামের স্যুইটের সদস্য" "
নেডড করেছে

1
আপনি সঠিক. কোনও কারণে আমি ভেবেছিলাম এটি অন্য একটি লাইব্রেরির অংশ। আমি উপরে পোস্ট করা কোডটি কোনওভাবেই কোনও ডিরেক্টরিতে ব্যাচ রূপান্তর স্বয়ংক্রিয় করার সঠিক উপায়।
মার্সিন

2
আপনি এই আদেশটি উন্নত করতে বাশ প্রসারণ ব্যবহার করতে পারেন:for f in *.png; do convert "$f" "${f/%png/jpg}"; done
27-25

শুধু মনে রাখবেন এটি কেস সংবেদনশীল। আমার ক্যামেরাটির নাম এটি * .জেপিজি হিসাবে আছে এবং এটি প্রথম নজরে বুঝতে পারেনি।
tsenapathy

10

TL; ড

যারা কেবল সহজ আদেশগুলি চান:

আসল ফাইলগুলি রূপান্তর এবং রাখুন :

mogrify -format jpg *.png

আসল ফাইলগুলি রূপান্তর এবং সরান :

mogrify -format jpg *.png && rm *.png

ব্যাচ রূপান্তরিত ব্যাখ্যা

পার্টিতে দেরি করে কিন্ডা, তবে যে কেউ ক্লাইমে খুব স্বাচ্ছন্দ্য বোধ করতে না পারে তার জন্য সমস্ত বিভ্রান্তি পরিষ্কার করতে এখানে একটি সুপার ডাম্বড-ডাউন রেফারেন্স এবং ব্যাখ্যা রয়েছে।

উদাহরণ ডিরেক্টরি

bar.png
foo.png
foobar.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 এ শেষ হয়)।

রূপান্তর এবং সরান

সমস্ত পিএনজি ফাইলকে জেপিজিতে রূপান্তর করে, মূল সরিয়ে দেয়।

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অংশটি থেকে মুক্তি পেয়েছেন (এটি প্রতিস্থাপন করুন বা এটি সমস্ত একসাথে মুছে ফেলুন) ...
don_crissti

@ ডন_ক্রিসটি, পড়ার সময় কী হয়েছে?
স্টিভেন জেফরিস

এটি ত্রুটিযুক্ত প্রবণ (যদি না আপনি 100% নিশ্চিত হন যে আপনি বুদ্ধিমান ফাইলের নামগুলি নিয়ে কাজ করছেন) এবং ধীর (যেমন খুব, খুব, খুব ধীর গতির)।
don_crissti

ডিফল্ট জেপিজি গুণমানটি কী, এবং কীভাবে ফাইল টাইমস্ট্যাম্পগুলি সংরক্ষণ করা যায়?
ড্যান ড্যাসক্লেস্কু

@ ড্যানডাসকলেসকু উপরের পদ্ধতিগুলি (শেষটি ব্যতীত) ফাইলের নাম সংরক্ষণ করবে তবে তাদের এক্সটেনশানটি প্রতিস্থাপন করবে, তাই টাইমস্ট্যাম্পযুক্ত ফাইলগুলি ঠিক আছে (সর্বদা একটি অনুলিপি তৈরি করুন এবং পরীক্ষা করুন)। ইমেজম্যাগিকের মতে, "ডিফল্টটি হ'ল আপনার ইনপুট চিত্রের আনুমানিক গুণমানটি যদি এটি নির্ধারণ করা যায় তবে তা ব্যবহার করা হবে, অন্যথায় 92" ( চিত্রম্যাগিক.আর.সি.সি.পি / কম্যান্ড-লাইন-ওপশন। পিএপিপি মানের) গুণমান-গুণমানের সাথে নির্দিষ্ট করা যেতে পারে <সংখ্যা> এই <সংখ্যা> 1 100 হয়
স্টিভেন Jeffries

8

প্রকৃত " png2jpg" কমান্ড আপনি খুঁজছেন দুই কমান্ড নামক বাস্তবতা বিভক্ত হয় pngtopnmএবং cjpeg, এবং তারা অংশ netpbmএবং libjpeg-progsযথাক্রমে প্যাকেজ।

png2pnm foo.png | cjpeg > foo.jpeg

6
find . -name "*.png" -print0 | xargs -0 mogrify -format jpg -quality 50

1
একটি গভীর / পুনরাবৃত্ত ডিরেক্টরি জন্য একটি লাইন সমাধানের জন্য ধন্যবাদ যা ফলস্বরূপ *.jpgফাইলগুলি মূল ফাইলগুলির পাশে ফেলে দেয় *.png, ফাইলের আকার / গুণমান কীভাবে হ্রাস করতে হয় তা দেখায় এবং ডিরেক্টরি বা ফাইলের নামের কোনও বিজোড় অক্ষরের কারণে ভেঙে যায় না।
জোয়েল পুররা 15

5

আমার দ্রুত সমাধান for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done


2
এটি আমি কখনও দেখেছি এমন
কুরুচিপূর্ণ

1
@ ইভিলসপ সত্যই, এটি শেল স্ক্রিপ্টগুলির জন্য মার্জিত। এটি দোষযুক্ত বলে দাবি করা ন্যায়বিচার নয় fair
সর্বাধিক হাওয়েল

8
@ ম্যাক্সহোয়েল ম্যান নং এখানে এই একজন মার্জিত সংস্করণ হতে হবে: for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done। এটি সম্পূর্ণ অপ্রয়োজনীয় ls, grepএবং sedকলগুলিকে এড়িয়ে যায় (এবং echo, তবে আইআইআরসি এটি ব্যাশ অন্তর্নির্মিত এবং এর ফলে / খুব কম পারফরম্যান্সের প্রভাব পড়বে না), এবং দুটি পাইপ এবং দুটি সাব-শেল থেকে মুক্তি পাবে এবং এতে টাইপিং কম জড়িত। এটি আরও সামান্য বহনযোগ্য, যেহেতু সমস্ত সংস্করণ lsপার্স করা নিরাপদ নয়।
অশুভপুটি

@ ইভিলসপ আমি সংশোধন করছি! সাবাশ.
সর্বাধিক হাওয়েল

4

অনেক বছর অনেক দেরি হয়ে গেছে, এই উদ্দেশ্যে বিশেষত একটি পিএনজিজেপিগ ইউটিলিটি রয়েছে, যা আমি রচনা করেছি।

@ মার্সিন দ্বারা কোডটি মানিয়ে নেওয়া:

#!/bin/sh

for img in *.png
do
    filename=${img%.*}
    png2jpeg -q 95 -o "$filename.jpg" "$filename.png"
done

3

ব্যাচ প্রক্রিয়াজাতকরণের জন্য:

for img in *.png; do
  convert "$img" "$img.jpg"
done

আপনি যদিও ইমেজ 1.png.jpg এর মতো ফাইলের নাম দিয়ে শেষ করবেন।

এটি ব্যাশ এবং সম্ভবত বোর্নে কাজ করবে। আমি অন্যান্য শাঁস সম্পর্কে জানি না, তবে কেবলমাত্র পার্থক্যটি সম্ভবত লুপ সিনট্যাক্স হতে পারে।


1

ফাইলগুলি যখন একাধিক ডিরেক্টরি বিস্তৃত হয় তখন রূপান্তর করতে আমি এটিই ব্যবহার করি। আমার আসলটি টিএনএ থেকে পিএনজি ছিল

find . -name "*.tga" -type f | sed 's/\.tga$//' | xargs -I% convert %.tga %.png

ধারণাটি হ'ল আপনার findপ্রয়োজনীয় ফাইলগুলি, এক্সটেনশনটি বন্ধ করে দিয়ে আবার এটিকে যুক্ত করুন xargs। সুতরাং পিএনজিকে জেপিজিতে, আপনি এক্সটেনশানগুলি পরিবর্তন করতে এবং আলফা চ্যানেলগুলির সাথে মোকাবেলা করার জন্য একটি অতিরিক্ত জিনিস করতে চান যথা পটভূমিটি সেট করে (উদাহরণস্বরূপ সাদা, তবে আপনি এটি পরিবর্তন করতে পারেন) তারপরে চিত্রটি সমতল করুন

find . -name "*.png" -type f | sed 's/\.png$//' | xargs -I% convert %.png -background white -flatten  %.jpg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.