PHP kullanarak uygun bir arka plan / ön plan rengini seçme

3 Cevap php

Ben bir neden, uygun bir arka plan rengini ve tabii ki hesap okunabilirliği ve erişilebilirlik içine almak gerekir, en fazla gitmek istiyorum metin için bir renk hesaplamak için bulmak için arıyorum.

Ben diziden iki renkleri seçmek gerekir, renkleri kendi onaltılık temsilcilikleri saklanır.

#CC9966
#996633
#FFCC99
#CCCC99
#000000
#333333
#666633
#663333
#CC9933
#FFCCCC

Ben GD / imagemagick gibi bir PHP kütüphanesi kullanabilir?

Herhangi bir öneriniz (PHP kullanıyorum unutmayın)

3 Cevap

Öncelikle ben size Particletree bu mükemmel blog yazısı bakmak gerektiğini düşünüyorum.

Söyleniyor, ben onların smarty_modifier_contrast () işlevini kullanın ve bunu belirli ihtiyaçlarını karşılamak için biraz, gibi bir şey değiştirmek istiyorsunuz:

function color_contrast($bgcolor, $color1, $color2, $color3, ...)
{
    return (hexdec($bgcolor) > 0xffffff / 2) ? min(array_slice(func_get_args(), 1)) : max(array_slice(func_get_args(), 1));
}

Yani sadece bu durumda ben bir değişken kullandım, (don't forget to drop the #! ) arka plan için herhangi bir rasgele bir renk kullanın ve sonra diziye diğer tüm renkleri geçmesi gerekir argümanların sayısı ancak bu renkleri tek bir dizi kabul böylece değiştirebilirsiniz - daha sonra otomatik olarak $bgcolor bağlı olarak koyu ya da hafif renk seçin ve okunurluk için yeterince iyi bir kontrast sağlayacaktır:

function color_contrast($bgcolor, $colors = array())
{
    return (hexdec($bgcolor) > 0xffffff / 2) ? min($colors) : max($colors);
}

Seçmek için $bgcolor, ben saturation veya luminance gibi bu görevi size yardımcı olmak için kullanımı ikinci bir işlevi, önceden söylediğimiz rastgele gibi bunu, bu gerçekten olabilir Sizin için ne arıyorsanız bağlıdır.

Rastgele renk seçimi genellikle okunabilirlik ve erişilebilirlik için iyi bir fikir değildir, bu yüzden tasarım yeniden düşünmek öneririm. Ya da en azından sadece siyah ya da beyaz metni sınırlamak.

Bu bir seçenek değilse, o zaman ben renkler arasındaki görsel fark yaklaşık olarak eşit olması ve bu nedenle de biraz okunabilirliği ile ilgili olacak iki renk arasında bir "mesafe" hesaplanırken öneririm.

I distance = abs(2*(r1-r2) + 3*(g1-g2) + (b1-b2)) kullanın ve sonra yeterince yüksek bir mesafe yoktur herhangi bir kombinasyonunu filtre olacaktır. Bu parlak bir arka plan üzerinde koyu renk, ya da hemen hemen iyi okunabilmesi için bir ön koşuldur, ve renk körü insanlar da iki açıkça farklı tonları göreceksiniz sağlar karanlık bir arka plan, parlak bir renk ile sona sağlamalıdır. Onlar toplam algılanan parlaklığı üzerinde farklı bir etkiye sahip olduğundan renk bileşenleri farklı şekilde ağırlıklandırılmış edilir.

Kendi RGB bileşenlerine her rengi kırmak, 0Xff tarafından, her maske 0x80 (veya bazı diğer benzer değer, belki 0x66) ekleyin ve tabloda en yakın değeri bulmak.