Menggunakan GIMP, dapatkah Anda “menghapus” suatu warna?

9

Saat ini saya sedang mengerjakan aplikasi iOS dan saya berusaha untuk merekayasa balik jendela dialog peringatan standar mereka. Saya telah berhasil mencari tahu apa nilai alfa pada latar belakang yang digunakan adalah melalui beberapa sampling warna terhadap tampilan hitam pekat, dan tampilan putih pekat.

Dengan informasi ini, menggunakan GIMP apakah mungkin untuk hanya "menghapus" warna latar belakang, sehingga saya hanya memiliki latar belakang asli yang tidak dicampur?

Saya hanya memiliki tampilan peringatan dalam bentuk gambar sebagai tangkapan layar dari aplikasi yang berjalan.

Dan F
sumber

Jawaban:

8

Iya itu mungkin. Biarkan saya uraikan bagaimana ini dilakukan, menggunakan gambar ini dari Wikimedia Commons (oleh ed_g2s , dilisensikan sebagai CC-By-SA 3.0 ) sebagai contoh:

Gambar demonstrasi transparansi PNG oleh ed_g2s, dilisensikan sebagai CC-By-SA 3.0

  1. Buka versi latar belakang hitam dan putih sebagai lapisan gambar yang sama (menggunakan Open as Layers ... atau cukup buka keduanya dan salin dan tempel satu ke yang lain). Pindahkan lapisan putih di atas lapisan hitam jika belum seperti itu. Dua lapisan akan terlihat seperti ini:

    Gambar demonstrasi dengan latar belakang hitam Gambar demonstrasi dengan latar belakang putih

  2. Ambil perbedaan dari lapisan: mengkloning layer hitam (Anda akan membutuhkannya nanti), ubah mode layer white layer ke "perbedaan" dan menggabungkannya. Balikkan hasilnya. Ini memberi Anda saluran alfa dari gambar asli.

    Saluran alfa yang direkonstruksi

    Sunting: Jika latar belakang Anda bukan hitam dan putih, lapisan perbedaan terbalik tidak akan memiliki latar belakang hitam. Untuk memperbaikinya, pertama desaturate layer (menggunakan mode apa pun yang memberikan Anda kontras terbaik) dan kemudian gunakan Warna → Otomatis → Normalisasi untuk membuat latar belakang hitam. Anda juga bisa menggunakan Channel Mixer sebagai gantinya, tetapi agak sulit untuk digunakan.

    ( Normalisasi di atas berfungsi jika saluran alfa yang Anda buat ulang memiliki setidaknya beberapa bagian dengan opacity 100%; jika gambar yang Anda buat di mana-mana transparan, Anda dapat menggunakan Colors → Levels ... untuk mengatur hanya titik hitam saja. )

    Jika Anda belum memilikinya, Anda juga perlu membuat versi gambar Anda dengan latar belakang hitam untuk langkah selanjutnya. Untuk melakukannya, gunakan langkah-langkah tambahan berikut:

    • Pilih versi asli mana saja yang memiliki latar belakang lebih gelap. Buat layer baru di atasnya diisi dengan warna latar belakangnya.
    • Mengkloning layer perbedaan dan membaliknya kembali sehingga memiliki latar belakang putih. Tempatkan layer ini di atas warna solid baru yang baru saja Anda buat, atur mode layer-nya menjadi "multiply" dan gabungkan.
    • Akhirnya, ubah mode layer yang dihasilkan untuk "kurangi" dan gabungkan ke bawah ke layer dengan gambar asli. Ini harus mengurangi latar belakang asli, meninggalkan Anda dengan gambar pada latar belakang hitam.
  3. Jika kami menggunakan format gambar dengan alfa yang telah dikalikan, kami akan lebih atau kurang melakukannya sekarang. Tapi karena kita tidak, kita masih perlu melipatgandakan saluran RGB. Untuk melakukan itu, clone layer alpha yang kita buat pada langkah sebelumnya (atau cukup salin ke clipboard), atur mode layer-nya ke "bagi" dan gabungkan ke bawah dengan layer background hitam yang Anda kloning sebelum langkah 2. Hasilnya akan terlihat seperti ini (bandingkan dengan versi latar belakang hitam asli untuk melihat perbedaannya):

    De-multiply saluran RGB

  4. Sekarang, tambahkan layer mask ke layer yang dihasilkan, pilih mask dan tempelkan layer alpha ke dalamnya. Hasilnya sekarang akan lebih atau kurang mirip dengan gambar transparan asli. Terakhir, untuk mengubah topeng menjadi saluran alfa yang tepat, Anda dapat menerapkannya (tetapi ekspor PNG GIMP akan melakukannya untuk Anda meskipun Anda tidak melakukannya). Dan begitulah - satu PNG transparan direkonstruksi siap untuk pergi:

    Gambar yang direkonstruksi dengan transparansi

Tentu saja, teknik ini benar-benar mengharuskan Anda memiliki versi gambar pada murni latar belakang hitam dan putih murni. Jika latar belakangnya sedikit mati, metode yang sama mungkin masih dapat digunakan, tetapi Anda mungkin perlu melakukan penyesuaian warna tambahan dan hasilnya mungkin tidak sesempurna. ( Sunting: Lihat penambahan ke langkah 2 di atas. Instruksi yang diubah harus bekerja dengan latar belakang warna apa pun, asalkan warna solid.)


Ps. GIMP juga memiliki fitur "Penghapusan Warna" (sebagai campuran mode untuk alat Bucket Fill, atau sebagai Color to Alpha ... untuk seluruh gambar), yang berguna untuk merekonstruksi transparansi ketika Anda hanya memiliki satu versi gambar pada latar belakang warna solid. Namun, kecuali digunakan dengan hati-hati, ia memang memiliki kecenderungan untuk menghasilkan output yang agak lebih transparan daripada yang Anda inginkan .

Pps. Jika Anda membandingkan gambar asli dan gambar yang direkonstruksi dengan sangat hati-hati, Anda akan melihat bahwa gambar itu tidak persis sama - beberapa nilai warna dimatikan sekitar 1/256 atau lebih. Itu karena cara kerja mode "divide" layer GIMP : daripada menghitung kebalikan sebenarnya dari perkalian alpha, yang akan menjadi output = (255 × input ) / layer , itu sebenarnya menghitung output = (256 × input ) / ( layer+1 Ketidakcocokan ini, yang seolah-olah dilakukan untuk menghindari pembagian dengan nol, berarti bahwa beberapa warna mungkin membulatkan ke nilai yang sedikit berbeda dari yang seharusnya. Sayangnya, saya tahu tidak ada jalan keluar, selain menambal GIMP, menulis plugin untuk melakukan pembagian seperti yang kita inginkan, atau menggunakan beberapa program lain. Untungnya, perbedaan warna jarang jika benar-benar dapat dilihat oleh mata manusia.

Ilmari Karonen
sumber