% X opaklık uyguladıktan sonra bir rengin sonucunu bulmak için formül?


10

2 renk var

  1. #a1a2a4
  2. siyah ( #000000)
  3. beyaz ( #ffffff)

Şimdi birinci renge (gözle belirlendiği gibi) ilke en yakın rengi elde etmek için üçüncü rengin (beyaz) arka planına karşı ikinci renge (siyah) ne kadar opaklık (yüzde olarak) uygulamam gerektiğini bilmeliyim renk ( #a1a2a4).

Bunu nasıl yapabilirim?



İfadelerinizle biraz kafam karıştı: grayBelirtilen renge en yakın tonda bir tane istiyorsun , değil mi?
horatio

Yanıtlar:


6

Bu dava az çok basit (siyah beyazla uğraşıyorsunuz).

Rengi uyguladıktan sonra (# a1a2a4), RGB seviyelerini kontrol edin:

RGB seviyeleri

Yaklaşık 162 (ortalama) olduğunu görebilirsiniz ve 0 ila 255 arasında gidebileceğini bilerek, sadece yüzdeyi bulmanız gerekir:

162 * 100/255 = ~% 63,5

RGB , CMYK ile karşılaştırıldığında tam tersi şekilde çalıştığı için (renk karışımı açısından, yani tam renk karışımı beyaz ve CMYK tam renk karışımı siyah anlamına gelir), bu durumda gerçek yüzde% 100 ile değer arasındaki farktır. sahip olduğumuz:

100 - 63,5 = % 36,5

Yani opaklığın% 36'sını uygularsanız, bu renge sahip olacak, sadece test ettim.

Tabii daha karmaşık renklere sahip durumlarda, bu yöntem işe yaramaz ve yüzde almanın bir yolunu bilmiyorum, klasik deneme yanılma yapardım.


4

Soru, doğru anlarsam, "Bunu programlı olarak nasıl hesaplarsınız ?" Hedef "renginizi" bir alfa değerine dönüştürmek basit bir matematiktir.

Beyaz == [1,1,1] veya #ffffff veya 255,255,255, uygulamanıza bağlı olarak. Siyah == [0,0,0] vb.

Yani: hedef değeri normalleştirin (bu durumda, .6314), 1'den çıkartın ve siyah katmana alfa değeri olarak uygulayın. Tek seferde bu bir kanalı yapabilir ve sonuçları ortalayabilirsiniz, ancak neden rahatsız edersiniz, çünkü rengin nötr bir griden ayırt edilemez (göze) # a1a1a1. (Görünür renk tonu varsa işler daha karmaşık hale gelir, çünkü kanallar farklı değerlere sahip olacaktır, ancak aynı prensip geçerlidir.)


Bu orada bazı ciddi seksi geekage. 8)
Lauren-Clear-Monica-Ipsum

3
Neden sana teşekkür edeyim! <cep koruyucusunu ayarlar, kalemlerin eşit aralıklarla yerleştirilmesini sağlar>
Alan Gilbertson

0

Biraz daha hızlı deneme yanılma çeşidi:

Photoshop'ta onaltılık renginizi bir CMYK belgesinde oluşturun ve CMYK değerlerine bakın. 39/32/31/1 alıyorum.

Üst siyah ve alt beyaz olmak üzere iki katman oluşturun.

Bilgi penceresini yukarı çekin. Ayrı olarak, Katmanlar penceresini yukarı çekin.

Siyah katmanın opaklığı ile oynayın. Damlalığı renginizin üzerinde kullanın ve ne kadar yaklaştığınızı görmek için bilgi penceresine bakın. Bu, çoğunlukla opaklık - düzleştir - rengi kontrol et - düzleştirmeyi geri alma zamanından kazandırır.


Haklısın, ama bunu yapmanın çok geekier yolu var. 8-D
Alan Gilbertson

0

Ön plan ve arka plan renkleriniz (R, G ve B kanallarındaki tekdüze değerler) göz önüne alındığında #a1a2a4, opaklık tüm kanalları bir kerede etkilediğinden opaklığı değiştirerek tekdüze olmayan bir renk elde edemezsiniz . Ancak, #a1a1a1siyahın opaklığını ayarlayarak "yeterince yakın" bir renk elde edebilirsiniz 0.37. İşte kullandığım araç:

http://colorizer.org/

  1. "Arka Plan" ı tıklayın ve onaltılık değeri #fff
  2. "Düğme" yi tıklayın ve onaltılık değeri #000
  3. "Alfa / Opaklık" spektrumunda hedef rengi bulmak için bir damlalık yardımcı programını kullanın, ardından opaklık değerini almak için spektruma tıklayın.

0

Bu formülü bulmak lineer cebirde harika bir alıştırmadır. RGB ve lineer cebir kullanarak bu M matrisini buldum. RGBred = (237,32,36) ve RGBblue = (60,84,165) değerlerini birleştirmek istiyorsanız, alt katmanın% 100 opaklık ve üst katın% 50 olduğu opaklık daha sonra Mv'yi çoğalır, burada M aşağıdaki matristir ve v = (237,32,36,60,84,165). Mv = (157.777,71.444.107.444) elde ediyoruz.

Gerçek değer (159,71,103) 'dir, bu yüzden oldukça yakınız ama bazı hatalar var - muhtemelen ya M'yi hesaplamak için yuvarlatılmış değerler kullandığım ve / veya belki de RGB kullanmadığı için saydamlığı hesaplamak için başka bir ölçek düzleştirme. Muhtemelen en küçük kareler tipi bir yaklaşım kullanarak daha doğru bir matris alabilirdim ama çok tembeltim.

MI'nın aldığı matris

M=[-0.316438695251802233798084520470 -0.0205011495462359668020633451463 -0.627769626184202308338411657855 
    4.83088877248122926488562947487 -0.673109830626855247075257552051 0.137681159420289855072463768116]
[2.67597831835520455938498494132 0.215715090307662822540065922133 1.69848459052630338054958974280 -13.9750196437925615505500261925 
    3.20021608171817705605028810915 -0.370471014492753623188405797101]
[-6.62632375526968419148486246260 0.509833585674322977062528534400 -3.14436345482363613544439381045 35.0629474419416797625283743688
    -6.69242186135847738781211803779 1.41304347826086956521739130435]
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.