Misalkan Anda memiliki gambar apa pun (PNG atau JPG). Gambar ini memiliki latar belakang putih dan saya perlu membuat latar belakang ini transparan.
Saya telah mencoba dengan contoh-contoh ini:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
tetapi tanpa hasil yang diinginkan.
Bagaimana saya bisa membuatnya?
PENTING: Menggunakan convert
baris perintah.
png
imagemagick
alpha-transparency
Israel
sumber
sumber
convert original.png -transparent white new.png
tetapi setelah mencobanya, tidak dapat membuatnya berfungsi. Selain itu, apakah Anda yakin latar belakang Anda benar-benar putih (#FFFFFF), atau hampir putih (mis. #FEFEFE)?Jawaban:
Saya menggunakan ImageMagick 6.6.9-7 di Ubuntu 12.04.
Apa yang berhasil bagi saya adalah sebagai berikut:
Itu mengubah semua putih di test.png menjadi transparan.
sumber
Saya memiliki masalah yang sama. Di mana saya harus menghapus latar belakang putih dari format gambar jpg / png menggunakan ImageMagick.
Apa yang berhasil bagi saya adalah:
1) Ubah format gambar menjadi png:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
sumber
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Larutan
Penjelasan
Ini agak lebih panjang daripada jawaban sederhana yang diberikan sebelumnya, tetapi memberikan hasil yang jauh lebih baik: (1) Kualitas lebih unggul karena alfa antialiased, dan (2) hanya latar belakang yang dihilangkan dibandingkan dengan satu warna. ("Latar Belakang" didefinisikan sebagai warna yang kira-kira sama dengan piksel kiri atas, menggunakan isi banjir dari tepi gambar.)
Selain itu, saluran alfa juga terkikis setengah piksel untuk menghindari lingkaran cahaya. Tentu saja, operasi morfologi ImageMagick belum (belum?) Bekerja pada tingkat subpiksel, jadi Anda dapat melihat saya meledakkan saluran alfa hingga 200% sebelum terkikis.
Perbandingan hasil
Berikut adalah perbandingan pendekatan sederhana ("-fuzz 2% -transparent white") versus solusi saya, saat dijalankan pada logo ImageMagick . Saya telah meratakan kedua gambar transparan ke latar belakang coklat pelana untuk membuat perbedaan terlihat jelas (klik untuk aslinya).
Perhatikan bagaimana janggut Wizard menghilang dalam pendekatan sederhana. Bandingkan tepi Wizard untuk melihat bagaimana antialiased alpha membantu gambar berbaur dengan mulus ke latar belakang.
Tentu saja, saya sepenuhnya mengakui ada kalanya Anda mungkin ingin menggunakan solusi yang lebih sederhana. (Misalnya: Jauh lebih mudah untuk diingat dan jika Anda mengonversi ke GIF, Anda terbatas pada alfa 1-bit.)
mktrans shell script
Karena tidak mungkin Anda ingin mengetik perintah ini berulang kali, saya sarankan untuk membungkusnya dalam skrip. Anda dapat mengunduh skrip shell BASH dari github yang melakukan solusi yang saya sarankan. Ini dapat dijalankan pada banyak file dalam sebuah direktori dan menyertakan komentar yang berguna jika Anda ingin mengubah sesuatu.
bg_removal script
Ngomong-ngomong, ImageMagick sebenarnya hadir dengan skrip bernama "bg_removal" yang menggunakan floodfill dengan cara yang sama seperti solusi saya. Namun hasilnya kurang bagus karena masih menggunakan alpha 1-bit. Selain itu, skrip bg_removal berjalan lebih lambat dan sedikit lebih rumit untuk digunakan (Anda harus menentukan dua nilai fuzz yang berbeda). Berikut adalah contoh keluaran dari bg_removal.
sumber
gimp
atau apa pun. :)Ini bekerja untuk saya:
di mana semakin kecil% fuzz, semakin mendekati putih sejati atau sebaliknya, semakin besar%, semakin banyak variasi dari putih yang diizinkan untuk menjadi transparan
sumber
mktrans
skrip shell saya : github.com/hackerb9/mktransAnda dapat menggunakan ini untuk membuat latar belakang transparan
Di atas memberikan latar belakang transparan prefek
sumber
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
Menggunakan ImageMagick, ini sangat mirip dengan kode dan hasil hackerb9, tetapi merupakan baris perintah yang sedikit lebih sederhana. Itu mengasumsikan bahwa piksel kiri atas adalah warna latar belakang. Saya hanya mengisi latar belakang dengan transparansi, lalu memilih saluran alfa dan mengaburkannya dan menghapus setengah dari area yang diburamkan menggunakan -tingkat 50x100%. Kemudian hidupkan kembali semua saluran dan ratakan dengan warna coklat. -Blur 0x1 -tingkat 50x100% bertindak untuk antialias batas-batas transparansi saluran alfa. Anda dapat menyesuaikan nilai fuzz, jumlah blur dan nilai -tingkat 50% untuk mengubah derajat antialiasing.
sumber
Jika Anda ingin mengontrol tingkat transparansi Anda dapat menggunakan rgba. dimana a adalah alpha. 0 untuk transparan dan 1 untuk buram. Pastikan file hasil akhir harus memiliki ekstensi .png untuk transparansi.
sumber
Ya. Punya masalah yang sama juga. Inilah perintah yang saya jalankan dan berfungsi dengan sempurna:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
sumber