PHP – Vhodná barva písma podle obrázku

PHP

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?

  1. Projde pixel po pixelu a uloží každou barvu a počet takto barevných pixelů
  2. Najde podobné nalezené barvy a aritmeticky je zprůměruje s ostatními odstíny
  3. Barva nejčastěji vyskytnutá na obrázku se označí jako převažující a z ní se vychází
  4. 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ý).
  5. 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 :)

Komentáře