කණ්ඩායම ලිනක්ස් හි පීඑන්ජී ජේපීජී බවට පරිවර්තනය කරයි


174

ලිනක්ස් හි පීඑන්ජී පොකුරක් ජේපීජී බවට පරිවර්තනය කිරීමට හොඳ ක්‍රමයක් කිසිවෙකු දන්නවාද? (මම උබුන්ටු භාවිතා කරමි).

මට ෂෙල් ස්ක්‍රිප්ටයකට දැමිය හැකි png2jpg ද්විමයක් ඉතා සුදුසු වේ.

Answers:


252

ඔබේ හොඳම ඔට්ටුව වනුයේ Imagemagick භාවිතා කිරීමයි

මම සත්‍ය භාවිතය පිළිබඳ විශේෂ expert යෙක් නොවෙමි, නමුත් මම දන්නවා ඔබට මේ හා සම්බන්ධ ඕනෑම රූපයක් කළ හැකි බව!

උදාහරණයක්:

convert image.png image.jpg

එය මුල් පිටපත මෙන්ම පරිවර්තනය කළ රූපය ද නිර්මාණය කරයි. කණ්ඩායම සඳහා. මම හිතන්නේ ඔබ Mogrify මෙවලම භාවිතා කළ යුතුයි (imagemagick හි සිටින විට එකම විධාන රේඛාවෙන්). මෙය පැරණි රූප නැවත ලියන බව මතක තබා ගන්න .

විධානය:

mogrify -format jpg *.png  

7
නියමයි, එය හරියටම මම පසුව වූ අතර නැවත භාවිතා කරනු ඇත. මාර්ගය වන විට, ඔබ නොදැන සිටි පරිදි පැහැදිලි කිරීම සඳහා මෙය ඔබ අදහස් කළේ ය: පරිවර්තනය වෙනම ප්‍රතිදාන ගොනුවක් ජනනය කිරීම සඳහා භාවිතා කරයි, මුල් රූපය වෙනස් කිරීමට මොග්‍රිෆයි භාවිතා කරයි.
nedned

1
විනිවිද පෙනෙන පසුබිමක් සහිත png රූප නිසි ලෙස jpg බවට පරිවර්තනය නොවේ.
විෂ්ණු

5
විනිවිද පෙනෙන පසුබිමක් සහිත පීඑන්ජී පරිවර්තනය කිරීමට, පහත දැක්වෙන විධානය භාවිතා කරන්න:mogrify -format jpg -background black -flatten *.png
හයිපර්නොට්

4
මගේ ලිනක්ස් පෙට්ටියේ කෙවින්කොක්ස් mogrify -format jpeg img.pngලිපිගොනු 2 ක් සහ file img.*එක් පීඑන්ජී එකක් වාර්තා කළ පසු , මුල් ස්පර්ශ නොකළ, සහ නව ජෙපෙග් එකක් වාර්තා කළේය. ඒ නිසා mogrifyකරන්නේ නැහැ මේ අවස්ථාවේ දී ලියන්නට මුල් ගොනු.
නියුරිනෝ

5
සිට mogrifyප්රලේඛනය: " වෙත මෙම මෙවලම similiar වේ convert(ඔබ සමග ගොනුව ෙපර ෙයදුම වෙනස් නොකළහොත් මුල් රූපය ගොනු නැවත ලිවූ බව හැර -format විකල්පය) ඕනෑම ඔබ ඉල්ලා වෙනස් සමග. "
janko-මීටර්

85

මට තවත් විසඳුම් කිහිපයක් තිබේ.

සරලම විසඳුම බොහෝ විට දැනටමත් පළ කර ඇති ආකාරයට ය. ලූප සඳහා සරල බැෂ් එකක්.

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

කිසියම් හේතුවක් නිසා මම බාෂ් වල ලූප වළක්වා ගැනීමට නැඹුරු වෙමි, එබැවින් මෙහි වඩාත් ඒකාකාරී xargs ප්‍රවේශයක් ඇත, නම-මැන්ග්ලිං සඳහා bash භාවිතා කිරීම.

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

මම පාවිච්චි කරන එක. එකවර කාර්යයන් කිහිපයක් ක්‍රියාත්මක කිරීමට එය GNU සමාන්තරය භාවිතා කරයි, එමඟින් ඔබට කාර්ය සාධනය ඉහළ නංවයි. එය බොහෝ පද්ධති වල පෙරනිමියෙන් ස්ථාපනය කර ඇති අතර එය නියත වශයෙන්ම පාහේ ඔබේ ගබඩාවේ ඇත (එය වටා තිබීම හොඳ වැඩසටහනකි).

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

ඔබ සතුව ඇති ක්‍රියාවලි ගණනට පෙරනිමි රැකියා ගණන. මගේ ද්විත්ව හර පද්ධතියේ රැකියා 3 ක් භාවිතා කරමින් වඩා හොඳ CPU භාවිතය මට හමු විය.

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

ඔබට සංඛ්‍යාලේඛන කිහිපයක් අවශ්‍ය නම් (ETA, රැකියා සම්පුර්ණ කිරීම, රැකියාවකට සාමාන්‍ය කාලය ...)

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

ඔබ GNU සමාන්තරය භාවිතා කරන්නේ නම් විකල්ප වාක්‍ය ඛණ්ඩයක් ද ඇත.

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

වෙනත් අනුවාදයන් සඳහා සමාන වාක්‍ය ඛණ්ඩයක් (ඩෙබියන් ද ඇතුළුව).

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

2
සඳහා නිවැරදි බාෂ් නූල් ප්‍රසාරණය සඳහා +1, සමාන්තරව සඳහන් කිරීම සඳහා මට තවත් උච්චාරණයක් ලබා දිය හැකි නම්, මම එසේ කරමි. එක් අකුරු වර්ගයක් ඇත, කෙසේ වෙතත් - doneලූප සඳහා ඔබට අවසානයේ එය අවශ්‍ය වේ. සමාන්තර දේවල් සඳහා, ඔබට lsඑවැනි ඉදිකිරීමක් සහ නළයක් භාවිතා කිරීමෙන් වැළකී සිටිය හැකිය : parallel -j 3 --eta convert '{}' '{.}.jpg' ::: *.png( මෙහි බලන්න )
evilsoup

ස්ථාවර යතුරු ලියනය. එය මා නොදැන සිටි සිසිල් වාක්‍ය ඛණ්ඩයකි. මම වඩා හොඳට කැමති කුමන එකක්දැයි මම නොදනිමි. බොහෝ විට එකම හේතුව නිසා මම ලූප භාවිතා නොකරමි. මම එය විසඳුම තැබුවේ එය බොහෝ විට වඩා “නිසි” ක්‍රමය වන නමුත් එය මට lsවඩා අර්ථවත් වන නිසා මම බොහෝ විට මා සඳහා වන ක්‍රමයට ඇලී සිටිමි.
කෙවින් කොක්ස්

1
... එම වාක්‍ය ඛණ්ඩය ක්‍රියාත්මක වන්නේ GNU සමාන්තරව පමණක් බව සැලකිල්ලට ගත යුතුය. සමහර ලිනක්ස් ඩිස්ට්‍රෝස් වල ඇසුරුම් කර ඇති සමාන්තරය (ඩෙබියන් සහ උබුන්ටු වැනි) ඇත්ත වශයෙන්ම තරමක් වෙනස් වාක්‍ය ඛණ්ඩයක් සහිත වෙනස් අනුවාදයකි ( --වඩා භාවිතා කරන්න :::) - එසේ වුවද, එය GNU සමාන්තරයේ සමහර අංගයන් කලකිරීමට පත් නොකරයි.
evilsoup

(GNU සමාන්තරව ඇසුරුම් නොකරන ඩිස්ට්‍රෝස් වල සිටින අයට මෙහි ඇති උපදෙස් භාවිතා කර පහසුවෙන් ප්‍රභවයෙන් ස්ථාපනය කළ හැකිය )
evilsoup

මම හිතන්නේ මම එය නැවත වෙනස් කළ යුතුයි, එවිට එය හැකි තරම් අනුවාද සමඟ ක්‍රියා කරයි.
කෙවින් කොක්ස්

26

convertබොහෝ ලිනක්ස් බෙදාහැරීම් වල ඇති විධානය ImageMagick කට්ටලයේ කොටසක් ලෙස ස්ථාපනය කර ඇත. convertඩිරෙක්ටරියක් තුළ ඇති සියලුම පීඑන්ජී ලිපිගොනු ක්‍රියාත්මක කිරීමට සහ එම ද්විත්ව දිගු කිරීමේ ගැටළුව මඟහරවා ගැනීමට බාෂ් කේතය මෙන්න :

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

8
පරිවර්තනය සඳහා වන මෑන් පිටුවට අනුව: "පරිවර්තන වැඩසටහන ImageMagick (1) මෙවලම් කට්ටලයේ සාමාජිකයෙකි."
nedned

1
ඔබ හරි. කිසියම් හේතුවක් නිසා එය වෙනත් පුස්තකාලයක කොටසක් යැයි මම සිතුවෙමි. ඩිරෙක්ටරියක් තුළ කණ්ඩායම් පරිවර්තනය ස්වයංක්‍රීය කිරීම සඳහා නිවැරදි ක්‍රමය මා ඉහත පළ කළ කේතයයි.
මාර්සින්

2
එම විධානය වැඩි දියුණු කිරීම සඳහා ඔබට bash පුළුල් කිරීම භාවිතා කළ හැකිය:for f in *.png; do convert "$f" "${f/%png/jpg}"; done
evilsoup

මතක තබා ගන්න එය සිද්ධි සංවේදී බව. මගේ කැමරාව එයට * .JPG ලෙස නම් කර ඇති අතර පළමු අවස්ථාවේදී මෙය අවබෝධ නොවීය.
tsenapathy

11

tl; dr

සරලම විධානයන් අවශ්‍ය අයට:

මුල් ගොනු පරිවර්තනය කර තබා ගන්න :

mogrify -format jpg *.png

මුල් ගොනු පරිවර්තනය කර ඉවත් කරන්න :

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

කණ්ඩායම් පරිවර්තනය පැහැදිලි කිරීම

සාදයට ප්‍රමාද වී, නමුත් ක්ලී සමඟ එතරම් සැපපහසු නොවිය හැකි කෙනෙකුගේ සියලු ව්‍යාකූලතා ඉවත් කිරීම සඳහා, මෙන්න සුපිරි ගොළු යොමු කිරීමක් සහ පැහැදිලි කිරීමක්.

උදාහරණ නාමාවලිය

bar.png
foo.png
foobar.jpg

සරල පරිවර්තනය

සියලුම මුල් png ගොනු තබා ගන්නා අතරම jpg ගොනු සාදයි.

mogrify -format jpg *.png

ප්‍රති ult ලය

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

ප්‍රති ult ලය

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

සියළුම උප බහලුම්වල ඇති සියලුම png ගොනු පරිවර්තනය කර එක් එක් සඳහා ප්‍රතිදානය ලබා දෙන්න:

find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; echo "Converted $i to ${i%.*}.jpg"; done

සියළුම උප බහලුම්වල ඇති සියලුම png ගොනු පරිවර්තනය කරන්න, එහි ප්‍රති j ලයක් ලෙස ඇති සියලුම 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

බොහෝ විට ඔබට ලබා දී ඇති හොඳම පිළිතුර නම් ඔබ එම while readකොටස ඉවත් කර ගැනීමයි (එය ප්‍රතිස්ථාපනය කරන්න හෝ සියල්ල ඉවත් කරන්න) ...
don_crissti

@don_crissti, කියවීමේදී ඇති වරද කුමක්ද?
ස්ටීවන් ජෙෆ්රිස්

එය දෝෂ සහිතයි (ඔබ 100% ක් විශ්වාස නොකරන්නේ නම් ඔබ බුද්ධිමත් ලිපිගොනු නාම සමඟ කටයුතු කරන බව) සහ මන්දගාමී (ඉතා, ඉතා මන්දගාමී වැනි).
don_crissti

සුපුරුදු JPG ගුණාත්මකභාවය යනු කුමක්ද, සහ ගොනු කාලරාමු සංරක්ෂණය කරන්නේ කෙසේද?
ඩෑන් ඩස්කල්ස්කු

AnDanDascalescu ඉහත ක්‍රම (අන්තිම ක්‍රමය හැර) ගොනු නාම ආරක්ෂා කරනු ඇත, නමුත් ඒවායේ දිගුව ප්‍රතිස්ථාපනය කරයි, එබැවින් කාලරාමුවල ගොනු සුදුසු විය යුතුය (සෑම විටම පිටපතක් සාදා පළමුව පරීක්ෂා කරන්න). ImageMagick ට අනුව, "පෙරනිමිය නම් ඔබේ ආදාන රූපයේ ඇස්තමේන්තුගත ගුණාත්මකභාවය තීරණය කළ හැකි නම් එය භාවිතා කිරීමයි, එසේ නොමැති නම් 92" ( imagemagick.org/script/command-line-options.php#quality ) -quality සමඟ ගුණාත්මකභාවය නියම කළ හැකිය. <number> එහිදී <number> 1 සිට 100 දක්වා වේ.
ස්ටීවන් ජෙෆ්රිස්

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
ගැඹුරු / පුනරාවර්තන නාමාවලියකට ස්තූතියි, එහි ප්‍රති ing ලයක් ලෙස ඇති *.jpgලිපිගොනු මුල් ලිපිගොනු අසල තබන අතර *.png, ගොනු ප්‍රමාණය / ගුණාත්මකභාවය අඩු කරන්නේ කෙසේද යන්න පෙන්වන අතර නාමාවලියෙහි හෝ ගොනු නාමයේ ඇති අමුතු අක්ෂර නිසා කැඩී නොයයි.
ජොයෙල් පුර

5

මගේ ඉක්මන් විසඳුම for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done


2
මෙය මා මෙතෙක් දැක ඇති
කැතතම

1
අවංකවම, ෂෙල් ස්ක්‍රිප්ට් සඳහා මෙය අලංකාරයි. එය කැටි ගැසුණු බව පැවසීම සාධාරණ නැත.
මැක්ස් හොවෙල්

8
Ax මැක්ස් හොවෙල් මිනිසා. මෙහි අලංකාර අනුවාදයක් වනු ඇත : for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done. ඒ අනවශ්ය මගහැරෙන ls, grepසහ sedඇමතුම් (සහ echo, නමුත් IIRC බව bash builtin වන අතර එසේ කිසිදු / ඉතා සුළු කාර්ය සාධනය බලපෑමක් ඇති කරනු ඇත), සහ පයිප්ප දෙකක් හා උපකවච දෙකක් ඉවත් ලක්වෙනවා, හා අඩු ටයිප් කිරීමයි. සියලුම අනුවාදයන් lsවිග්‍රහ කිරීමට ආරක්ෂිත නොවන බැවින් එය ඊටත් වඩා අතේ ගෙන යා හැකිය.
evilsoup

@evilsoup මම නිවැරදි කරමි! හොඳ වැඩක්.
මැක්ස් හොවෙල්

4

වසර ගණනාවක් ප්‍රමාද වැඩියි, මේ සඳහා විශේෂයෙන් png2jpeg උපයෝගීතාවයක් ඇත, එය මා විසින් රචනා කරන ලද්දකි .

C මාසින් විසින් කේතය අනුවර්තනය කිරීම:

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

Image1.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

0

ඔබේ පීඑන්ජී විනිවිද පෙනෙන නම්, පරිවර්තනය කිරීමට පෙර කළු බීජී එකක් එකතු කිරීමට උත්සාහ කරන්න:

mogrify -format jpg -background black -flatten *.png

හෝ සුදු බීජී:

mogrify -format jpg -background white -flatten *.png

ස්තූතියි. අන්තිම අදහස් දැක්වීම නමුත් හාවා වළකට බැසීමෙන් මාව බේරාගත්තේ ඇයිදැයි සොයා බැලීම? >> mogrify: 'jpg:' රූපය විවෘත කළ නොහැක: එවැනි ගොනුවක් හෝ නාමාවලියක් නොමැත @ error / blob.c / OpenBlob / 3496.
ස්ලැබෝ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.