it-swarm.asia

دفعة تحويل PNG إلى JPG في لينكس

هل يعرف أحد طريقة جيدة لتحويل مجموعة من PNGs إلى ملفات بتنسيق JPG في نظام التشغيل bux؟ (أنا أستخدم Ubuntu).

سيكون الثنائي png2jpg الذي يمكن أن أسقطه في برنامج شل أمرًا مثاليًا.

151
nedned

سيكون أفضل رهان هو استخدام Imagemagick

أنا لست خبيراً في الاستخدام الفعلي ، لكنني أعلم أنه يمكنك القيام بأي صورة متعلقة بهذا الأمر.

مثال على ذلك هو:

convert image.png image.jpg

وسوف تبقي الأصلي وكذلك إنشاء الصورة المحولة. أما بالنسبة للدفعة. أعتقد أنك بحاجة إلى استخدام أداة Mogrify (من نفس سطر الأوامر عندما تكون في imagemagick). ضع في اعتبارك أن هذا الكتابة فوق الصور القديمة.

الأمر هو:

mogrify -format jpg *.png  
226
William Hilsum

لدي بضعة حلول أخرى.

الحل الأبسط يشبه معظم النشر بالفعل. باش بسيط للحلقة.

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

لسبب ما ، أميل إلى تجنب الحلقات الموجودة في bash ، فإليك طريقة xargs غير مألوفة ، حيث استخدم bash لتشويه الاسم.

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'

وإذا كنت تريد بعض الإحصائيات (ETA ، تم إكمال الوظائف ، متوسط ​​الوقت لكل وظيفة ...)

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

يوجد أيضًا بناء جملة بديل إذا كنت تستخدم GNU Parallel.

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

بناء جملة مماثل لبعض الإصدارات الأخرى (بما في ذلك ديبيان).

parallel convert '{}' '{.}.jpg' -- *.png
76
Kevin Cox

يتم تثبيت الأمر convert الموجود في العديد من توزيعات Linux كجزء من مجموعة ImageMagick. إليك رمز bash لتشغيل convert على جميع ملفات PNG في دليل وتجنب مشكلة الامتداد المزدوج هذه:

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

ليرة تركية، والدكتور

بالنسبة لأولئك الذين يريدون فقط أبسط الأوامر:

تحويل و الاحتفاظ الملفات الأصلية:

mogrify -format jpg *.png

تحويل و إزالة الملفات الأصلية:

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

دفعة تحويل وأوضح

Kinda متأخرا للحفلة ، ولكن فقط لتوضيح كل الالتباسات لشخص قد لا يكون مرتاحًا جدًا مع cli ، إليك مرجع وشرح فاشل للغاية.

مثال على الدليل

bar.png
foo.png
foobar.jpg

تحويل بسيط

يحتفظ بجميع ملفات بابوا نيو غينيا الأصلي وكذلك يخلق ملفات JPG.

mogrify -format jpg *.png

النتيجة

bar.png
bar.jpg
foo.png
foo.jpg
foobar.jpg

شرح

  • mogrify جزء من ImageMagick مجموعة من الأدوات لمعالجة الصور.
    • يعالج mogrify الصور في المكان، بمعنى أن الملف الأصلي قد تم الكتابة عليه ، باستثناء الخيار -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

شرح

  • الجزء الأول هو نفسه كما هو مذكور أعلاه ، فإنه سيتم إنشاء ملفات 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

قم بتحويل جميع ملفات png في جميع الدلائل الفرعية ، ضع جميع jpgs الناتجة في دليل all ، وقم بترقيمها ، وإزالة ملفات png الأصلية ، وعرض الإخراج لكل ملف أثناء حدوثه:

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
8
Steven Jeffries

في الواقع ، يتم تقسيم الأمر "png2jpg" الفعلي الذي تبحث عنه إلى أمرين يدعى pngtopnm و cjpeg ، وهما جزء من حزم netpbm و libjpeg-progs ، على التوالي.

png2pnm foo.png | cjpeg > foo.jpeg
7
Teddy
find . -name "*.png" -print0 | xargs -0 mogrify -format jpg -quality 50
4
emdog4

الحل السريع الخاص بي for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done

3
max

بعد سنوات عديدة ، هناك png2jpeg فائدة لهذا الغرض على وجه التحديد ، الذي قمت بتأليفه.

تكييف الكود بواسطةMarcin:

#!/bin/sh

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

للمعالجة الدفعية:

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

سوف ينتهي بك الأمر مع أسماء الملفات مثل image1.png.jpg.

هذا سوف يعمل في باش ، وربما بورن. لا أعلم عن الأصداف الأخرى ، لكن الفرق الوحيد المحتمل هو بناء جملة الحلقة.

2
Jeffrey Aylesworth

هذا هو ما أستخدمه للتحويل عندما تمتد الملفات أكثر من دليل واحد. كان بلدي الأصلي TGA إلى PNG

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

المفهوم هو find_ الملفات التي تحتاجها ، وقم بإزالة الامتداد ثم أضفه مرة أخرى بـ xargs. لذلك من بابوا نيو غينيا إلى JPG ، يمكنك تغيير الامتدادات وتفعل شيئًا إضافيًا للتعامل مع قنوات ألفا ، وهي تحديد الخلفية (في هذا المثال أبيض ، ولكن يمكنك تغييره) ثم تسطيح الصورة

find . -name "*.png" -type f | sed 's/\.png$//' | xargs -I% convert %.png -background white -flatten  %.jpg
0
Archimedes Trajano