Transparansi untuk RGB + Alpha yang tidak mengalami masalah budaya

16

Saya memiliki lapisan transparan di Photoshop CS5 (jadi secara internal, itu kemungkinan besar disimpan sebagai komponen RGB yang tidak dikembangkan ditambah komponen alfa per piksel).

Sekarang saya ingin mengubah ini menjadi lapisan buram (hanya RGB tanpa kesalahan) + masker alpha. hasilnya harus sama dengan aslinya.

Saya tidak bisa hanya mendasari layer transparan dengan warna hitam, ambil seleksi dari sana sebagai mask dan gabungkan layer-layer tersebut, karena ini akan mengakibatkan alpha di-preultiplied dalam nilai RGB.

Saya harap Anda memahami masalahnya dan dapat memberi saya solusi untuk itu.

Sebagai penjelasan alternatif: Saya ingin proses REVERSE ini:

  1. buat layer baru dan rekatkan pada gambar apa pun
  2. buat topeng dengan gradien putih ke hitam
  3. terapkan layer mask

Gambar penjelasan:

Negara A: masukkan deskripsi gambar di sini

Negara B: masukkan deskripsi gambar di sini


PENTING: layer ini hanya untuk contoh ini adalah merah yang benar-benar konstan - tetapi Anda bisa memikirkan gambar sembarang alih-alih merah konstan. jadi - untuk pergi dari negara bagian A ke negara bagian B, kita cukup menerapkan layer mask.

Saya ingin tahu cara beralih dari Negara B ke Negara A.

Tikar
sumber
Saya ingin tahu apakah beberapa jenis plug-in masking mungkin membantu di sini. Informasi opacity ada, itu hanya masalah cara mendapatkannya. Mendapatkan informasi tingkat piksel tidak ada dalam skrip API (setidaknya dalam Applescript, tetapi semua bahasa yang didukung tampaknya selaras dengan apa yang saya lihat).
Philip Regan

Jawaban:

6

Saya benar-benar mengerti rasa sakit Anda. Inilah solusi saya :)
Ekstrak Alpha sebagai Mask Action.
Inilah yang dilakukannya:

masukkan deskripsi gambar di sini Sunting:
masukkan deskripsi gambar di sini
Saya harap ini membantu :)

Miro
sumber
Wah, keren .. Tentu memang membutuhkan tindakan untuk membuatnya menjadi proses yang dapat ditanggung.
Ars Magika
5

Salah! Semua salah!

Saya membodohi diri saya sendiri, dan Anda juga dalam proses: Apa yang saya buat memang gambar yang ditakdirkan sebelumnya - tidak ditiru dengan hitam tetapi dengan putih. Saya meninggalkan jawaban ini untuk orang lain untuk membangun di atasnya.


Saya berhasil melakukannya seperti ini:

  1. Ekstrak saluran RGBA sejati dari gambar
  2. Gunakan mereka untuk membangun gambar baru

Dan inilah cara saya melakukannya:

gambar uji

Ini adalah gambar uji yang saya gunakan. Tampilan saluran di PS terlihat seperti ini:

saluran

Dengan memilih masing-masing saluran, saya menyalinnya ke dalam lapisan tersendiri, lalu meratakannya dengan latar belakang putih untuk menerima peta hitam dan putih seperti yang ditunjukkan di sini:

bw-map

Saya juga mengekstraksi transparansi gambar asli ke dalam layer dengan mengklik perintah pada thumbnail layer dan mengisi layer baru dengan seleksi.

Kemudian saya membuat gambar baru dengan dimensi yang sama dan tanpa transparansi. Saya kemudian menempelkan layer RGB yang telah saya buat ke saluran yang sesuai di gambar baru:

saluran gambar baru

Pada langkah terakhir, saya 'unflattened' layer dengan mengklik ganda, dan membuat layer mask menggunakan alpha-layer dari gambar asli, menghasilkan ini:

layer mask


Seperti yang dinyatakan di atas, ini tidak membuat gambar yang tidak ditrafiprolkan, karena contoh saya harus terlihat seperti ini untuk tidak ditrafipipkan:

versi yang benar

Adakah yang lebih pintar dari saya dan dapat membuat ini? Saya rasa tanpa scripting berbasis pixel tingkat lanjut, ini tidak mungkin di dalam Photoshop.

Florian Dobler
sumber
5

Ok - Saya membuat filter pixelBender sederhana yang dapat digunakan dengan photoshop PixelBender plugin (http://labs.adobe.com/downloads/pixelbenderplugin.html) untuk menghapus transparansi untuk layer. ini dia: http://neo.cycovery.com/removeTransparency.pbk

Tikar
sumber
2

Berdasarkan jawaban yang diberikan dan komentar Anda, jawaban singkatnya adalah: Anda tidak dapat melakukan apa yang Anda inginkan. Setelah Anda menerapkan mask, layer diberikan dan data gambar yang tidak terlihat dibuang.

EDIT:

Saya membuat beberapa sampel file png dan kemudian menggunakan php untuk memanipulasinya (kode sumber di bawah).

Jika saya membuat png dengan transparansi acak dan menyimpan sementara layer memiliki mask, maka area 100% yang jelas (seperti dari alat kotak) menunjukkan putih apakah dukungan alpha diijinkan atau tidak. Gradien yang mengandung sejumlah 100% jelas tidak muncul dengan alpha dinonaktifkan.

Jika saya menerapkan layer mask (secara permanen) dan kemudian membuat png, maka php menyajikan gambar asli jika alpha dinonaktifkan.

Jadi potensi penyelesaian untuk ini adalah menemukan paket perangkat lunak yang tidak mendukung alpha PNG dan menyimpannya dari sana. Sedangkan untuk memulihkan topeng asli, saya belum melihatnya.

Kedua sampel kode adalah bukti konsep dan SLOW.

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$enable_alpha = 0;  //set to 0 to disable aplha

if ($enable_alpha) {
    imagealphablending($im, false);
    imagesavealpha($im, true);
}

header('Content-Type: image/png');
imagepng($im);

imagedestroy($im);

?>

Untuk mengekstrak alfa (catatan: php memiliki batasan GD 128 alfa tingkat, bukan 256), sehingga beberapa presisi hilang. Alfa dapat diregangkan hingga 256 menggunakan alat level)

<?php

$im = imagecreatefrompng('./images/alphatest_nolayer.png');
$w = imagesx($im);
$h = imagesy($im);

$om = imagecreatetruecolor($w,$h);

for ($x = 0; $x < $w; $x++) {
    for ($y = 0; $y < $h; $y++) {
        $rgb = imagecolorat($im, $x, $y);
        $colors = imagecolorsforindex($im,  $rgb);

        $orgb = imagecolorallocate($om,$colors['alpha'],$colors['alpha'],$colors['alpha']);
        imagesetpixel($om,$x,$y,$orgb);
    }
}

header('Content-Type: image/png');
imagepng($om);

imagedestroy($om);
imagedestroy($im);

?>
horatio
sumber
tapi datanya masih ada. itu bagian RGB dari data piksel RGBA. pasti ada cara untuk mengekstraknya
Mat
1
mengapa Anda tidak memberikan file contoh dunia nyata? Dalam pertanyaan Anda, Anda dengan jelas menunjukkan satu layer dengan area transparan dan tanpa mask, atau indikasi saluran alpha.
horatio
.png memiliki warna palet yang telah ditentukan sebelumnya untuk hitam transparan 100%, yang akan digunakan (oleh photoshop) bila ada transparansi 100% hanya untuk menghemat ruang disk.
Ars Magika
Tidak yakin ini benar-benar menjawab pertanyaan - tampaknya khusus untuk penanganan PNG.
e100
2

Saya menemukan cara melakukannya di GIMP mungkin bukan PhotoShop tetapi setidaknya itu akan melakukan apa yang Anda minta. (Bagaimanapun saya menafsirkannya;))

  • Buka gambar di GIMP.
  • Klik dengan mousebutton kanan Anda pada layer di kotak lapisan
  • Pilih " tambahkan layer mask " dari menu konteks
  • Pada menu berikut, pilih " transfer saluran alpha layer " dan klik " tambahkan " -tombol

Pada titik ini, Anda memiliki gambar dengan mask kanal alfa.

Anda dapat melangkah lebih jauh:

  • Klik kanan layer mask dan pilih " delete layer mask "
  • Anda sekarang ditinggalkan dengan gambar tanpa topeng alpha.

Ada juga klip youtube tentang cara melakukannya.

Roberto De Vivo
sumber
Roberto: Ya, Anda menemukan jawabannya. Itulah yang kami inginkan, dan gratis !! Saya akan menggunakan video yang Anda poskan sebagai jawaban untuk orang lain yang meminta hal yang sama (sampai sekarang hanya mungkin dengan menduplikasi layer ke PS secara tak terbatas)
1

Ini kelihatannya sangat membingungkan. Jika saya memahami pertanyaan asli dan berbagai klarifikasi dengan benar, masalahnya adalah untuk mengambil gambar arbitrer yang mengandung transparansi dan membuatnya sepenuhnya buram, kemudian menerapkan nilai alfa asli sebagai topeng untuk menciptakan kembali penampilan asli.

Jika ini pertanyaannya, itu adalah jawaban yang sangat sederhana, jika sedikit membosankan.

  1. Salin layer 10 kali. Transparansi akan "mengisi" pada gambar komposit.

  2. Gabungkan semua salinan (tetapi BUKAN lapisan asli , yang Anda perlukan untuk langkah terakhir).

  3. Ulangi langkah 1 dan 2 dengan layer gabungan, lalu lakukan lagi. Pada titik ini, semua piksel yang kurang dari 100% transparan sekarang 100% buram (jika ada beberapa nyasar, ulangi prosesnya sampai tidak ada). Itu sebanyak mungkin informasi gambar yang dapat dipulihkan.

  4. Ctl / Cmd-Klik thumbnail layer asli untuk memuat transparansi.

  5. Dengan layer baru yang buram dipilih, klik ikon layer mask di Layers Panel.

Alan Gilbertson
sumber
0

Ok, ini sebenarnya cukup sederhana (Anda harus mengabaikan semut berbaris)

Buat layer baru dan isi seluruhnya dengan warna apa pun yang Anda gunakan (jika pengambilan sampel diambil dari bagian tengah gambar pertama)

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Kemudian ambil gambar pertama Anda dan CTRL + Klik thumbnail layer, Anda akan melihat beberapa versi ini: masukkan deskripsi gambar di sini

Seperti yang saya katakan sebelumnya: abaikan semut yang berbaris, bulu-bulu mulai berlaku secara otomatis di CS5.

Kemudian pastikan Anda telah memilih layer yang diisi dan klik tombol mask:

masukkan deskripsi gambar di sini

Maka cukup sembunyikan lapisan bawah dan Anda harus selesai, dengan efek yang tepat setelah Anda :)

masukkan deskripsi gambar di sini

Dan itulah cara merekayasa balik topeng yang diterapkan di CS5. Fungsi pemilihan lapisan CS5 cukup canggih, sehingga sebagian besar waktu mengabaikan semut marching karena mereka tidak menunjukkan dengan benar bulu apa pun yang akan melanjutkan seleksi :)

Semoga ini berhasil untuk Anda.

Kyle
sumber
terima kasih atas jawaban Anda tetapi ini bukan yang saya cari - seperti yang dijelaskan merah konstan hanya untuk contoh ini! itu bisa berupa gambar APA PUN (tidak hanya warna isian yang konstan) - dan tentu saja saya tidak memiliki gambar asli yang tidak transparan yang tersedia
Mat
Anda harus memposting gambar Anda di pertanyaan Anda. Jika Anda memposting isian konstan, kami akan menjawab berdasarkan isian konstan. Cobalah untuk menggunakan teknik di sini, pemilihan CS5 sangat maju, mungkin akan mengejutkan Anda. Itu berhasil saya.
Kyle
tentu saja saya tahu tentang teknik seleksi tersebut! masalah yang dimaksud adalah bagaimana mengakses hanya bagian RGB dari lapisan transparan
Mat
Di atas lapisan ada tiga tab, klik saluran. Di sana Anda memiliki Topeng Merah, Hijau, Biru dan Lapisan. Mungkin ini yang Anda cari?
Kyle
tetapi lapisan seperti pada neo.cycovery.com/alpha_prob2.jpg tidak menampilkan saluran alfa - melainkan hanya menampilkan saluran RG dan B dengan transparansi yang sudah diterapkan
Mat
0

Apa yang ingin Anda lakukan dengan mudah dilakukan oleh sebuah plugin, seperti plugin Photofreebies "Remove Transparency". Pertama-tama Anda perintah-klik layer untuk memilih piksel transparan, kemudian simpan informasi transparansi ini di saluran baru untuk tetap di sekitarnya. Kemudian Anda menerapkan filter "Hapus Transparansi" dan Anda melihat piksel 'tersembunyi' di lapisan Anda berubah buram (cukup menarik untuk melihat bagaimana Photoshop tata letak piksel transparan 100% BTW Anda). Saya benar-benar berharap selama bertahun-tahun bahwa ini dibangun ke dalam Photoshop asli, tapi sayangnya, terlalu canggih, saya kira.

Sayangnya, saya tidak dapat menemukan versi plugin yang kompatibel dengan Photoshop CS6 untuk Mac, jadi saya macet sekarang. GraphicConverter dapat melakukannya juga (Hapus saluran Alpha).

zmippie
sumber
0

Inilah jawabannya:

  1. Buat layer dengan hal-hal yang Anda inginkan dalam gambar.

  2. Tentukan pilihan untuk saluran alpha yang diinginkan.

  3. Jadikan seleksi sebagai "layer mask" untuk layer gambar.

  4. Klik kanan layer mask dan "Terapkan layer mask".

Sekarang keajaiban dimulai:

  1. Pergi ke "Layer", dan di bagian bawah: "Anyaman", lalu pilih "Hapus black matte".

Sama sama!

Tagihan Listrik
sumber