Bagaimana saya bisa mengonversi folder .pngs ke .jpgs saat mengatur warna latar belakang?

10

Saya memiliki folder file png yang memiliki latar belakang transparan. Saya ingin mengonversinya dari baris perintah dan mempertahankan latar belakang transparan gambar.

Saya menghargai bantuan apa pun.

Karena jpg tidak mendukung transparansi, jadi bagaimana saya bisa menentukan nilai hex warna latar belakang output jpg? Saat ini defaultnya adalah #ffffff? Saya telah mencoba skrip ini, tetapi memberikan latar belakang putih jpg output:

mogrify -quality 100 -format jpg *.png

Memperbarui

Saya membuat file png ini di inkscape. Saya harus menyebutkan bahwa tujuan saya dalam mengkonversi pngs ini ke jpg adalah untuk menghilangkan tepi bergerigi pada objek melingkar atau sudut. The pngs saat ini memiliki tepi bergerigi dan saya membaca bahwa mengonversikannya ke jpg dapat menyelesaikan masalah ini. Namun konversi melalui metode yang dijabarkan dalam jawaban Christian Skjødt memberikan gambar tepi bergerigi yang lebih buruk lagi. Apakah ada cara saya bisa mengonversi pngs ke jpg dan juga menggunakan anti-aliasing atau mungkin teknik lain untuk menghilangkan tepi bergerigi? Terima kasih untuk bantuannya.

James
sumber
3
Cukup sulit untuk menjawab pertanyaan Anda jika selalu berubah ... Untuk referensi di masa mendatang: Cobalah untuk memasukkan apa yang ingin Anda capai dalam pertanyaan Anda dari awal. Apakah "pembaruan 2" Anda: Apakah "kekasaran" hanyalah hasil dari resolusi yang Anda pilih? Bagaimana jika Anda meningkatkan resolusi (nomor DPI dalam dialog "Ekspor bitmap ...")?
Marcel Stimberg

Jawaban:

3

Untuk memperhalus tepi Anda bisa membuat PNGs 10x lebih besar dari ukuran target Anda, lalu mengubah ukuran dengan anti-aliasing ke JPG. Saya telah melakukan ini menggunakan Python dan Python Imaging Library untuk efek yang baik, tapi saya tidak yakin bagaimana melakukannya dengan menggunakan alat lain.

brousch
sumber
28

Format JPEG tidak mendukung transparansi - oleh karena itu mempertahankan latar belakang transparan tidak dimungkinkan jika Anda ingin (atau harus) menggunakan format JPEG. Lihat Wikipedia untuk ikhtisar kemampuan berbagai format gambar.

Perhatikan bahwa JPEG 2000 memang mendukung transparansi, tetapi jauh lebih jarang daripada format JPEG. Tergantung pada kasus penggunaan Anda apakah ini merupakan alternatif yang layak.

Marcel Stimberg
sumber
Saya mungkin salah, tapi OP bertanya tentang pengaturan untuk warna apa saja area transparan dibuat. Mereka dibuat putih, tetapi OP bisa menggunakan warna biru, misalnya.
nanofarad
16

Untuk pertanyaan kedua Anda:

Untuk menentukan warna latar belakang saat mengonversi gambar Anda, Anda dapat menggunakan -fillopsi:

mogrify -quality 100 -format jpg -fill "#FF0000" -opaque none *.png

Menggunakan -backgroundmemberikan hasil yang serupa. Jangan lupakan -opaque none.

Christian Skjødt
sumber
Hei, terima kasih atas bantuannya. Apakah ada cara saya bisa antialias output jpeg melalui perintah ini? Lihat pembaruan 2 di atas untuk konteks tambahan. Terima kasih.
James
4

Maaf, tidak mungkin, jpegformat tidak mendukung alpha channelsehingga Anda tidak dapat memiliki transparansi.

Tuan Shunz
sumber
0

tergantung pada apa yang Anda coba lakukan dengan gambar, dimungkinkan untuk menempatkan saluran alpha ke gambar skala abu-abu yang terpisah atau bitmask, dan program yang menggunakan gambar akan menerapkan gambar tambahan sebagai nilai transparan / transparan. . Meskipun pada akhirnya lebih baik untuk memodifikasi program sehingga mendukung alpha png.

Lie Ryan
sumber