2009-11-16 02:06:38 +0000 2009-11-16 02:06:38 +0000
172
172

Batch converting PNG to JPG in linux

誰かlinuxでPNGをJPGにバッチ変換する良い方法を知っていますか?(私はUbuntuを使っています)。

シェルスクリプトにドロップするだけのpng2jpgバイナリがあれば理想的です。

回答 (10)

247
247
247
2009-11-16 02:15:29 +0000

あなたの最善の策は、 Imagemagick

私は実際の使用法の専門家ではありませんが、私はあなたがかなりこれに関連する画像を行うことができます知っています!

例は次のとおりです:

convert image.png image.jpg

そしてそれは、変換された画像を作成するだけでなく、オリジナルを保持します。バッチに関しては 私はあなたがMogrifyツールを使用する必要があると思います(imagemagickのときに同じコマンドラインから)。これは古い画像を上書きすることに注意してください。

コマンドは次のとおりです。

83
83
83
2013-01-28 02:45:11 +0000

最もシンプルな解決策は、すでに投稿されているようなものです。

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

なぜか私はbashでのループを避ける傾向があるので、ここではbashを使った、よりunixyなxargsのアプローチを紹介します。GNU Parallelを使って複数のジョブを一度に実行し、パフォーマンスを向上させます。多くのシステムにデフォルトでインストールされており、ほぼ間違いなくあなたのレポにあるはずです (周りに置いておくと良いプログラムです)。

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

統計情報 (ETA、完了したジョブ、ジョブごとの平均時間など) が必要な場合は

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

GNU Parallel を使用している場合は、別の構文もあります。

26
26
26
2009-11-16 03:28:26 +0000

多くの Linux ディストリビューションにある convert コマンドは ImageMagick スイートの一部としてインストールされています。以下はディレクトリ内のすべての PNG ファイルに対して convert を実行し、二重拡張子の問題を回避するための bash コードです:

for img in *.png; do
    filename=${img%.*}
    convert "$filename.png" "$filename.jpg"
done
11
11
11
2015-10-17 15:02:05 +0000

tl;dr

ただ最も簡単なコマンドが欲しい人のために:

変換keep元のファイル:

mogrify -format jpg *.png

変換remove元のファイル。

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

バッチ変換の説明

ちょっと遅れてしまいましたが、クリに慣れていない人のために混乱を解消するために、以下のように説明しています。

Example Directory

bar.png
foo.png
foobar.jpg

Simple Convert

Simple Convert

jpgファイルを作成するだけでなく、すべての元のpngファイルを保持します。

mogrify -format jpg *.png

結果

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

説明

Convert and Remove

すべてのpngファイルをjpgに変換し、元のファイルを削除します。

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

結果 bar.jpg foo.jpg foobar.jpg

説明

  • 最初の部分は上記と全く同じで、新しいjpgファイルを作成します。
  • *.pngはブール演算子です。要するに:
  • プログラムが終了すると、終了ステータスを返します。
  • && 短絡評価 を行うので、右の部分は there were no errors の場合にのみ実行されます。これは、変換時にエラーがあった場合、元のファイルをすべて削除したくない場合に便利です。
  • 0コマンドはファイルを削除します。
8
8
8
2009-11-16 05:29:10 +0000

実際の「png2jpg」コマンドは、実際には「pngtopnm」と「cjpeg」という2つのコマンドに分かれていて、それぞれ「netpbm」と「libjpeg-progs」というパッケージの一部です。

6
6
6
2014-10-13 17:12:00 +0000
find . -name "*.png" -print0 | xargs -0 mogrify -format jpg -quality 50
5
5
5
2012-05-07 12:42:40 +0000

私のクイックソリューションfor i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done

4
4
4
2016-10-22 09:37:31 +0000

何年も遅れてしまいましたが、この目的のために私が作成した png2jpeg ユーティリティがあります。

3
3
3
2009-11-16 02:28:02 +0000

バッチ処理の場合:

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

ファイル名が image1.png.jpg のようになってしまいますが。他のシェルのことは知りませんが、唯一の違いはループ構文でしょう。

1
1
1
2016-09-17 02:34:45 +0000

これは、ファイルが複数のディレクトリにまたがるときに変換するために私が使用するものです。私のオリジナルのものは TGA to PNG

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

概念はあなたが必要とするファイルを find し、拡張子を除去してから xargs でそれを再び追加することです。だからPNGからJPGのために、拡張子を変更し、アルファチャンネルを扱うために1つの余分なことをするでしょうすなわち背景を設定して(この例では白ですが、あなたはそれを変更することができます)その後、イメージを平らにする

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

関連する質問

6
10
5
37
9