Adakah yang tahu cara yang baik untuk mengonversi sekelompok PNG menjadi JPG di linux? (Saya menggunakan Ubuntu).
Biner png2jpg yang bisa saya masukkan ke shell script akan ideal.
linux
shell-script
jpeg
png
nedned
sumber
sumber
mogrify -format jpg -background black -flatten *.png
mogrify -format jpeg img.png
saya memiliki 2 file danfile img.*
melaporkan satu png, yang asli tidak tersentuh, dan yang baru jpeg. Jadimogrify
tidak tidak menimpa file asli dalam kasus ini.mogrify
dokumentasi: " Alat ini serupa denganconvert
kecuali bahwa file gambar asli ditimpa (kecuali Anda mengubah akhiran file dengan opsi -format ) dengan perubahan apa pun yang Anda minta. "Saya punya beberapa solusi lagi.
Solusi paling sederhana adalah seperti kebanyakan sudah diposting. Bash sederhana untuk loop.
Untuk beberapa alasan saya cenderung menghindari loop di bash jadi di sini adalah pendekatan xargs yang lebih unixy, menggunakan bash untuk nama-mangling.
Yang saya gunakan. Ini menggunakan GNU Parallel untuk menjalankan banyak pekerjaan sekaligus, memberi Anda peningkatan kinerja. Ini diinstal secara default pada banyak sistem dan hampir pasti di repo Anda (ini adalah program yang bagus untuk dimiliki).
Jumlah pekerjaan default ke jumlah proses yang Anda miliki. Saya menemukan penggunaan CPU yang lebih baik menggunakan 3 pekerjaan pada sistem dual-core saya.
Dan jika Anda menginginkan beberapa statistik (ETA, pekerjaan selesai, waktu rata-rata per pekerjaan ...)
Ada juga sintaks alternatif jika Anda menggunakan GNU Parallel.
Dan sintaksis yang serupa untuk beberapa versi lain (termasuk debian).
sumber
done
di akhir untuk loop. Juga, untuk hal-hal paralel, Anda bisa menghindari menggunakan ituls
dan pipa dengan konstruk seperti:parallel -j 3 --eta convert '{}' '{.}.jpg' ::: *.png
(lihat di sini )ls
metode untuk diri saya sendiri karena lebih masuk akal bagi saya.--
daripada:::
) - dan bahkan kemudian, secara frustasi tidak memiliki beberapa fitur paralel GNU.The
convert
perintah yang ditemukan pada banyak distribusi Linux diinstal sebagai bagian dari ImageMagick suite. Inilah kode bash untuk dijalankanconvert
pada semua file PNG dalam direktori dan hindari masalah ekstensi ganda:sumber
for f in *.png; do convert "$f" "${f/%png/jpg}"; done
tl; dr
Bagi mereka yang hanya menginginkan perintah paling sederhana:
Konversi dan simpan file asli:
Konversi dan hapus file asli:
Penjelasan Konversi Gelombang Dijelaskan
Agak terlambat ke pesta, tetapi hanya untuk menjernihkan semua kebingungan bagi seseorang yang mungkin tidak terlalu nyaman dengan cli, berikut ini adalah referensi dan penjelasan yang sangat bodoh.
Direktori Contoh
Konversi sederhana
Menyimpan semua file png asli serta membuat file jpg.
Hasil
Penjelasan
-format
opsi. (Dari situs :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
pilihan menentukan bahwa Anda akan mengubah format, dan argumen berikutnya perlu jenis (dalam hal ini, jpg).*.png
adalah file input (semua file berakhiran .png).Konversi dan Hapus
Mengonversi semua file png ke jpg, menghapus yang asli.
Hasil
Penjelasan
&&
adalah operator boolean. Pendeknya:0
berarti tidak ada kesalahan.&&
melakukan evaluasi hubung singkat , bagian kanan hanya akan dilakukan jika tidak ada kesalahan . Ini berguna karena Anda mungkin tidak ingin menghapus semua file asli jika ada kesalahan mengonversi mereka.rm
perintah menghapus file.Barang Mewah
Sekarang inilah beberapa barang untuk orang-orang yang yang nyaman dengan cli tersebut.
Jika Anda ingin output saat mengonversi file:
Konversikan semua file png di semua subdirektori dan berikan output untuk masing-masingnya:
Konversikan semua file png di semua subdirektori, masukkan semua jpg yang dihasilkan ke dalam
all
direktori , beri nomor, hapus file png asli, dan tampilkan output untuk setiap file saat terjadi:sumber
while read
bagian tersebut (ganti atau hapus semuanya) ...Sebenarnya "
png2jpg
" perintah Anda cari adalah pada kenyataannya dibagi menjadi dua perintah yang disebutpngtopnm
dancjpeg
, dan mereka adalah bagian darinetpbm
danlibjpeg-progs
paket, masing-masing.sumber
sumber
*.jpg
file yang dihasilkan di sebelah file asli*.png
, menunjukkan cara mengurangi ukuran / kualitas file dan tidak pecah karena ada karakter aneh dalam direktori atau nama file.solusi cepat saya
for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done
sumber
for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done
. Itu menghindari yang benar-benar tidak perluls
,grep
dansed
panggilan (danecho
, tapi IIRC itu adalah bash builtin dan karenanya tidak akan memiliki / sangat sedikit dampak kinerja), dan menghilangkan dua pipa dan dua subkulit, dan melibatkan kurang mengetik. Ini bahkan sedikit lebih portabel, karena tidak semua versils
aman untuk diuraikan.Bertahun-tahun terlambat, ada utilitas png2jpeg khusus untuk tujuan ini, yang saya tulis.
Mengadaptasi kode oleh @Marcin:
sumber
Untuk pemrosesan batch:
Anda akan berakhir dengan nama file seperti image1.png.jpg.
Ini akan bekerja di bash, dan mungkin bourne. Saya tidak tahu tentang shell lain, tetapi satu-satunya perbedaan adalah sintaks loop.
sumber
Ini yang saya gunakan untuk mengonversi ketika file menjangkau lebih dari satu direktori. Yang asli saya adalah TGA ke PNG
Konsepnya adalah Anda
find
file yang Anda butuhkan, menanggalkan ekstensi lalu menambahkannya kembalixargs
. Jadi untuk PNG ke JPG, Anda akan mengubah ekstensi dan melakukan satu hal tambahan untuk menangani saluran alfa yaitu mengatur latar belakang (dalam contoh ini putih, tetapi Anda dapat mengubahnya) kemudian ratakan gambarsumber