Nejlepší by bylo použít ImageMagick.
Nejsem odborník na skutečné použití, ale vím, že s tím můžete dělat cokoli, co souvisí s obrázky!
Příkladem je:
convert image.png image.jpg
který zachová originál i vytvoří převedený obrázek.
Pokud jde o dávkovou konverzi, myslím, že musíte použít nástroj Mogrify, který je součástí ImageMagick.
Mějte na paměti, že toto přepíše staré obrázky.
Příkaz je:
mogrify -format jpg *.png
Mám ještě několik řešení.
Nejjednodušší řešení je stejné jako většina již zveřejněných. Jednoduchá smyčka bash for.
for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
Z nějakého důvodu mám tendenci se vyhýbat smyčkám v bash, takže zde je více unixový přístup xargs, který používá bash pro modifikaci jmen.
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
Ten, který používám já. Využívá GNU Parallel ke spouštění více úloh najednou, což vám poskytuje zvýšení výkonu. Na mnoha systémech se standardně instaluje a téměř určitě je ve vašem repozitáři (je to dobrý program mít po ruce).
ls -1 *.png | parallel convert '{}' '{.}.jpg'
Výchozí počet úloh odpovídá počtu jader CPU, která máte. Našel jsem lepší využití CPU pomocí 3 úloh na mém dvoujádrovém systému.
ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
A pokud chcete nějaké statistiky (předpokládaný čas příjezdu, dokončené úlohy, průměrný čas na úlohu...)
ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
Pokud používáte GNU Parallel, existuje také alternativní syntaxe.
parallel convert '{}' '{.}.jpg' ::: *.png
A podobná syntaxe pro některé další verze (včetně debianu).
parallel convert '{}' '{.}.jpg' -- *.png
convert
příkaz nalezený na mnoha distribucích Linuxu je nainstalován jako součást sady ImageMagick. Zde je bash kód pro spuštění convert
na všechny soubory PNG v adresáři a vyhněte se problému s dvojitým rozšířením:
for img in *.png; do
filename=${img%.*}
convert "$filename.png" "$filename.jpg"
done