Konversi gambar skala abu-abu menjadi gambar saluran alpha di shell unix


14

Saya memiliki gambar skala abu-abu. Saya ingin mengubahnya menjadi PNG transparan, sehingga piksel hitam (dalam gambar asli) menjadi sepenuhnya buram, piksel putih menjadi sepenuhnya transparan, piksel abu-abu 50% akan menjadi 50% transparan, dan seterusnya untuk semua nuansa diantara.

Bagaimana saya bisa mencapai ini?

(Ya, saya tahu bahwa ini hampir pertanyaan yang sama dengan Mengubah nuansa grayscale ke saluran alpha , tapi saya ingin tahu bagaimana melakukan ini hanya dengan menggunakan alat baris perintah - mis. ImageMagick atau NetPBM.)

Berikut adalah contoh hasil dari pertanyaan yang disebutkan di atas. Sampel ini adalah hasil yang ingin saya capai hanya dengan menggunakan alat baris perintah.

Sampel

Jika Anda membuka PNG ini di pemirsa yang mendukung transparansi, Anda akan mengerti maksud saya.

Jawaban:


18

Ooookay. Setelah banyak googling, dan membaca lebih banyak dari manual ImageMagick daripada yang sebenarnya saya pedulikan, inilah jawabannya. Mengingat bahwa Anda memiliki gambar skala abu-abu yang dipanggil source.png, inilah perintah saya.

Untuk membuat piksel hitam transparan dan menjaga piksel putih apa adanya, jalankan perintah ini:

 convert source.png -alpha copy -fx '#fff' result.png

Untuk membuat piksel putih transparan dengan tetap apa adanya, gunakan:

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png

Mari kita jelaskan perintah terakhir itu sedikit lebih menyeluruh:

  • convert - Apakah perintah ImageMagic (salah satu dari beberapa)
  • source.png - Gambar sumber skala abu-abu.
  • -alpha copy - Salin konten file sebelumnya ke saluran alpha.
  • -channel alpha - Tetapkan bahwa operator berikut hanya akan memengaruhi saluran alfa.
  • -negate- Balikkan saluran alfa (akan, karena sebelumnya -chanel alphatidak mempengaruhi bagian lain dari gambar).
  • +channel- Menentukan bahwa operator berikut saja seharusnya akan mempengaruhi saluran warna, dan tidak lagi mengubah saluran alfa. (Ini adalah default, dan oleh karena itu kami tidak perlu memberikannya dalam contoh pertama, lebih sederhana.)
  • -fx '#000'- Ganti konten saluran warna dengan piksel hitam. (Karena +channelsaluran alpha tidak akan terpengaruh).

Sangat penting untuk memasukkan -fxopsi terakhir , jika tidak semua piksel semi-transparan dalam gambar yang dihasilkan akan mempertahankan warna. (Karena piksel ini setengah transparan, mungkin tidak jelas, tetapi hasil akhirnya tidak seperti yang diharapkan.)

Saya menemukan daftar opsi ImageMagick cukup berguna.


penjelasan yang cukup bagus untuk mencapai tujuan saya, ketika saya menggunakan perintah kedua yang membuat gambar saya lebih gelap daripada gambar skala abu-abu yang sebenarnya. Sebenarnya, tujuan saya untuk mencapai nada warna yang sama yang ada dalam skala abu-abu selain transparansi itu seperti yang diharapkan. ada ide untuk mencapai itu?
Hardik Patel

itu sangat berguna, terima kasih! :) senang saya tidak harus mencari tahu sendiri
Sam Watkins

Aku cinta kamu!!!!!!
mescarra

Jenis komentar seperti itu mungkin lebih baik dikirim kepada saya melalui saluran ini: okcupid.com/profile/zrajm :)
zrajm

1
tidak yakin mengapa, tetapi dengan versi saat ini (ImageMagick 7.0.7-21) saya hanya mendapatkan gambar putih / hitam pekat sebagai hasilnya, tanpa saluran alfa. Saya menyalin baris perintah kata demi kata, hanya mengubah jalur input / output file. Mungkin mereka membuat beberapa perubahan yang tidak kompatibel.
Nama Tampilan

0

Dengan ImageMagick 7.0, jawaban di atas tidak lagi. Tapi Anda bisa menggunakan:

konversi source.png -channel rgb -fx '#fff' result.png

Aka, isi saluran RGB dengan kosong, dan biarkan alpha seperti sebelumnya.


Saya curiga Anda melewatkan '-alpha copy' :)
Chris

0

Dengan imagemagick 7, saya merasa perlu untuk menentukan -channel RGBsebelum -fx, jika tidak, Anda mendapatkan gambar hitam pekat, seperti:

convert input.png -alpha copy -channel RGB -fx '#000' out.png

Dan meniadakan berguna jika Anda ingin hitam menjadi buram dan putih menjadi transparan:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.