POZOR! Článek jsem napsal před více jak rokem, a tudíž už nemusí reflektovat můj nynější názor nebo může být zastaralý.
Napsal jsem v PHP jednoduchou třídu, která nabídne vhodnou barvu pro text nad obrázek. (Najdete ji na Gitu, kde ji aktualizuji a vylepšuji.)
Stačí mít URL obrázku, nejlépe nějakého co používá málo kontrastní barvy, tedy jednoduché textury, jemné barevné přechody a podobně. Testoval jsem to i na fotkách, ale nedají se tam čekat tak dobré výsledky jako na předem zmíněných.
Jak výsledek může vypadat (jaké barvy od třídy dostanete) můžete vidět třeba na následujícím obrázku:
Jak třída funguje?
- Projde pixel po pixelu a uloží každou barvu a počet takto barevných pixelů
- Najde podobné nalezené barvy a aritmeticky je zprůměruje s ostatními odstíny
- Barva nejčastěji vyskytnutá na obrázku se označí jako převažující a z ní se vychází
- Od barvy se udělá o 128 odstínů (z 255) odlišná, ale s tím že se mění odstín, čili všechny tři RGB složky (aby se nestalo, že na pozadí bude oranžová a text by byl zelený).
- Vrátí pole s barvou vhodnou pro text
Použití může být následující:
include "FontColorByImage.class.php";
$url = "http://yousize.com/yourimage.png";
$fontColor = (new \Katuscak\FontColorByImage($url))->get();
print_r($fontColor);
/*
* Array (
* [r] => 160,
* [g] => 123,
* [b] => 255
* )
*/
Taky si ale můžete definovat své vlastní odstíny, a to pak třída vybere ten nejpodobnější, které jste jí nabídly místo toho, které by doporučila:
include "FontColorByImage.class.php";
$url = "http://yousize.com/yourimage.png";
$fontColorByImage = new \Katuscak\FontColorByImage($url);
$fontColorByImage->setPalette(array(
array(0,0,0), // black
array(255,255,255), // white
));
$fontColor = $fontColorByImage->get();
print_r($fontColor);
/*
* Array (
* [r] => 255,
* [g] => 255,
* [b] => 255
* )
*/
Kód najdete na GitHubu.
Znáte někoho, komu by článek mohl pomoct? Zasdílejte mu ho :)