Öngörülemeyen RGB + Alfa'ya şeffaflık


16

Photoshop CS5'te şeffaf bir katmanım var (bu yüzden dahili olarak, büyük olasılıkla önceden dağıtılmamış RGB bileşeni artı piksel başına bir alfa bileşeni olarak saklanır).

Şimdi bunu opak bir katmana (sadece öngörülmemiş RGB) + alfa maskeye dönüştürmek istiyorum. sonuç orijinal ile aynı görünmelidir.

Şeffaf tabakayı siyahla vurgulayamıyorum, ondan bir maske olarak seçim yapamıyorum ve katmanları birleştiremiyorum, çünkü bu alfa RGB değerlerinde önceden çarpılmasına neden olur.

Umarım sorunu anlarsın ve bana bir çözüm verebilirsin.

Alternatif bir açıklama olarak: Bunun TERS sürecini istiyorum:

  1. yeni bir katman oluşturun ve herhangi bir görüntüye yapıştırın
  2. beyazdan siyaha degrade olan maske oluşturma
  3. katman maskesini uygula

Açıklama resimleri:

Devlet A: resim açıklamasını buraya girin

Devlet B: resim açıklamasını buraya girin


ÖNEMLİ: katman bu örnek için tamamen sabit kırmızıdır - ancak sabit kırmızı yerine rastgele bir görüntü düşünebilirsiniz. yani - durum A'dan Durum B'ye gitmek için, katman katmanı uygulanmalıdır.

Devlet B'den Devlet A'ya nasıl gidileceğini bilmek istiyorum.


Bir çeşit maskeleme eklentisinin burada yardımcı olup olmayacağını merak ediyorum. Opaklık bilgisi vardır, bu sadece nasıl elde edileceği ile ilgilidir. Piksel düzeyinde bilgi alma, komut dosyası API'larında mevcut değildir (en azından Applescript'te), ancak desteklenen tüm diller gördüklerimden farklı görünüyor.
Philip Regan

Yanıtlar:



5

Yanlış! Hepsi yanlış!

Kendimi kandırdım ve siz de bu süreçte siz de yarattınız: Gerçekten yarattığım, siyahla değil, beyazla çarpılmış. Bu cevabı başkalarının üzerine inşa etmesi için bırakıyorum


Ben böyle yapmayı başardım:

  1. Görüntüden gerçek RGBA kanallarını çıkarın
  2. Yeni görüntü oluşturmak için bunları kullanın

İşte böyle yaptım:

test resmi

Bu kullandığım test görüntüsü. PS'deki kanal görünümü şöyle görünür:

kanallar

Tek tek kanalları seçerek bunları ayrı katmanlara kopyaladım, sonra burada gösterildiği gibi siyah beyaz bir harita almak için beyaz bir arka planla düzleştirdim:

bw-haritası

Ayrıca katman küçük resmine komut tıklayarak ve yeni bir katmanı seçerek doldurarak orijinal görüntünün saydamlığını bir katmana çıkarttım.

Sonra aynı boyutlarda ve şeffaflık olmadan yeni bir görüntü oluşturdum. Daha sonra oluşturduğum RGB katmanlarını yeni görüntüdeki ilgili kanallara yapıştırdım:

yeni görüntünün kanalları

Son adımda, katmanı çift tıklatarak 'düzleştirdim' ve orijinal görüntüden alfa katmanını kullanarak bir katman maskesi oluşturdum ve bunun sonucunda:

katman maskesi


Yukarıda belirtildiği gibi, bu örnek çarpılmamış bir görüntü oluşturmaz, çünkü örneğim çarpılmamış olmak için şöyle görünmelidir:

doğru versiyonu

Benden daha akıllı biri var mı ve bunu yaratabilir mi? Gelişmiş piksel tabanlı komut dosyası olmadan Photoshop'ta bu mümkün olmadığını tahmin ediyorum.


5

Tamam - Bir katmanın saydamlığını kaldırmak için photoshop PixelBender eklentisiyle (http://labs.adobe.com/downloads/pixelbenderplugin.html) kullanılabilecek basit bir pixelBender filtresi oluşturdum. işte burada: http://neo.cycovery.com/removeTransparency.pbk


2

Verilen cevaplara ve yorumlarınıza dayanarak, kısa cevap: istediğinizi yapamazsınız. Maskeyi uyguladıktan sonra katman oluşturulur ve görünmeyen görüntü verileri atılır.

DÜZENLE:

Bazı örnek png dosyaları yaptım ve daha sonra onları işlemek için php kullandım (aşağıdaki kaynak kodu).

Rasgele saydamlık içeren bir png oluşturup katmanın maskesi varken kaydedersem,% 100 net alanlar (bir kutu aracından olduğu gibi) alfa desteğinin etkin olup olmadığını beyaz gösterir. % 100 temiz miktar içeren degradeler alfa devre dışı durumdayken görünmez.

Katman maskesini uygularsam (kalıcı olarak) ve sonra png oluşturursam, alfa devre dışı bırakılırsa php orijinal görüntüyü sunar.

Bunun için potansiyel bir çözüm, alfa PNG'yi desteklemeyen bir yazılım paketi bulmak ve oradan yeniden kaydetmektir. Orijinal maskeyi kurtarmaya gelince, henüz bakmadım.

Her iki kod örneği de kavram kanıtı ve YAVAŞ.

<?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);

?>

Alfa'yı ayıklamak için (not: php, 256 yerine 128 düzey alfa GD sınırlamasına sahiptir), bu nedenle bazı hassasiyetler kaybolur. Alfa, seviye aracı kullanılarak 256'ya kadar genişletilebilir)

<?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);

?>

ama veriler hala orada. RGBA piksel verilerinin RGB kısmıdır. ayıklamak için bir yol olmalı
Mat

1
neden gerçek dünyadan bir örnek dosya vermiyorsun? Sorunuzda, şeffaf alanı olan ve maske olmayan veya alfa kanalı belirtisi olmayan tek bir katman açıkça gösteriliyor.
11'da horatio

.png,% 100 şeffaf siyah için önceden tanımlanmış bir palet rengine sahiptir;
Ars Magika

Bunun soruyu gerçekten yanıtladığından emin değilim - PNG işlemeye özgü görünüyor.
e100

2

GIMP'de nasıl yapılacağını öğrendim, PhotoShop olmayabilir ama en azından ne istersen yapacak. (Yine de yorumladığım gibi;))

  • Görüntüyü GIMP'de açın.
  • Katmanlar kutusundaki katmanda sağ fare düğmesiyle tıklayın
  • "Seç katman maskesi ekleyin bağlam menüsünden"
  • Aşağıdaki menüde " katmanları alfa kanalı aktar " ı seçin ve " ekle " düğmesini tıklayın

Bu noktada, alfa kanalı maskeli bir görüntü kaldı.

Bir adım daha ileri gidebilirsiniz:

  • Katman maskesini sağ tıklayın ve " katman maskesini sil " i seçin
  • Artık alfa maskesi olmayan görüntüyle kaldınız.

Bunun nasıl yapılacağı hakkında bir youtube klibi de var.


Roberto: Evet, cevabı buldun. Tam olarak istediğimiz bu ve ücretsiz! Aynı soruyu soran herhangi bir kişi için yanıt olarak gönderdiğiniz videoyu kullanacağım (şimdiye kadar sadece katmandaki

1

Bu akıl almaz derecede karmaşık görünüyor. Orijinal soruyu ve çeşitli açıklamalarını doğru bir şekilde anlarsam, sorun şeffaflık içeren herhangi bir rastgele görüntü almak ve tamamen opak yapmak, ardından orijinal görünümü yeniden oluşturmak için orijinal alfa değerlerini maske olarak uygulamaktır.

Bu soru ise, biraz sıkıcı ise çok basit bir cevaptır.

  1. Katmanı 10 kez kopyalayın. Saydamlık, bileşik görüntüde "doldurulacaktır".

  2. Tüm kopyaları birleştirin (ancak son adımlar için gereken orijinal katmanı DEĞİL ).

  3. Birleştirilmiş katmanla 1. ve 2. adımları tekrarlayın, sonra tekrar yapın. Bu noktada,% 100'den daha az saydam olan tüm pikseller şimdi% 100 opaktır (bazı katmanlar varsa, hiçbiri kalmayana kadar işlemi tekrarlayın). Bu, kurtarılması mümkün olduğu kadar çok resim bilgisidir.

  4. Saydamlığını yüklemek için orijinal katman küçük resmine tıklayın .

  5. Yeni, opak katman seçiliyken, Katmanlar Panelinde katman maskesi simgesini tıklatın.


0

Tamam, bu aslında oldukça basit (yürüyen karıncaları görmezden gelmelisin)

Yeni bir katman oluşturun ve hangi rengi kullanırsanız kullanın (örnekleme yapıyorsanız ilk görüntünün ölü merkezinden alın)

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Sonra ilk resminizi çekin ve CTRL + Katman küçük resmini tıklayın, bunun bazı versiyonlarını görmelisiniz: resim açıklamasını buraya girin

Daha önce söylediğim gibi: yürüyen karıncaları görmezden gelin, geçiş yumuşatma CS5'te otomatik olarak devreye girer.

Ardından, doldurulmuş katmanı seçtiğinizden emin olun ve maske düğmesini tıklayın:

resim açıklamasını buraya girin

Sonra sadece alt katmanı gizleyin ve yapmanız gereken, tam olarak peşinde olduğunuz etki ile :)

resim açıklamasını buraya girin

CS5'te uygulanan bir maskeyi tersine çevirmek bu şekilde olur. CS5 katman seçim işlevi oldukça gelişmiş, bu nedenle çoğu zaman seçim karıncaları doğru gitmeyecek şekilde yürüyen karıncaları görmezden geliyor :)

Umarım sizin için çalışır.


Cevabınız için teşekkürler ama aradığım şey bu değil - açıklandığı gibi sabit kırmızı sadece bu örnek içindir! HERHANGİ bir görüntü olabilir (sadece sabit dolgu rengi değil) - ve corse ben orijinal şeffaf olmayan görüntü mevcut değil
Mat

Resminizi sorunuza göndermelisiniz. Sabit bir dolgu yayınlarsanız, sürekli bir dolguya göre cevap veririz. Buradaki teknikleri kullanmaya çalışın, CS5'in seçimi çok gelişmiş, sizi şaşırtabilir. Beni öldürdü.
Kyle

Tabii ki bu seçim tekniklerini biliyorum! söz konusu sorun, RGB'ye şeffaf bir katmanın yalnızca bir kısmına nasıl erişileceği
Mat

Katmanların üstünde üç sekme vardır, kanalları tıklayın. Orada Kırmızı, Yeşil, Mavi ve Katman Maskesi var. Belki peşinde olduğun şey budur?
Kyle

ancak neo.cycovery.com/alpha_prob2.jpg dosyasındaki gibi bir katman alfa kanalı göstermez - bunun yerine yalnızca RG ve B kanallarını saydamlık uygulanmış olarak görüntüler
Mat

0

Yapmak istediğiniz şey, Photofreebies "Şeffaflığı Kaldır" eklentisi gibi bir eklenti tarafından kolayca yapılabilir. İlk önce saydam pikselleri seçmek için katmanı komut tuşuna basıp tıklarsınız, ardından bu saydamlık bilgisini yeni bir kanala kaydederek saklayabilirsiniz. Ardından "Saydamlığı Kaldır" filtresini uygularsınız ve katmanınızdaki 'gizli' pikselleri opak olarak görürsünüz (Photoshop'un% 100 şeffaf piksel BTW'nizi nasıl düzenlediğini görmek oldukça ilginçtir). Gerçekten yıllarca bunun Photoshop'ta doğal olarak inşa edilmesini diliyorum, ama ne yazık ki çok gelişmiş.

Ne yazık ki, Mac için böyle bir eklentinin Photoshop CS6 uyumlu bir sürümünü bulamıyorum, bu yüzden şu anda sıkıştım. GraphicConverter bunu da yapabilir (Alfa kanalını kaldır).


0

İşte cevap:

  1. Resimde istediğiniz şeylerle bir katman oluşturun.

  2. İstediğiniz alfa kanalı için bir seçim yapın.

  3. Seçimi görüntü katmanı için "katman maskesi" yapın.

  4. Katman maskesini sağ tıklayın ve "Katman maskesini uygula" yı tıklayın.

Şimdi sihir başlıyor:

  1. "Katman" a gidin ve en altta: "Paspas" ı seçin, ardından "Siyah örtüyü kaldır" ı seçin.

Rica ederim!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.