Dur Comme Faire

Aller au contenu | Aller au menu | Aller à la recherche

Problème de couleur de texte

Récemment, j'ai été confronté à un problème a priori simple. Dans une application PHP, les utilisateurs peuvent choisir une couleur à associer à un élement. Dans la liste des éléments, cette couleur est utilisée comme couleur de fond. Cela est très pratique car très visuel seulement cela peut poser un problème de lisibilité lorsque la couleur de fond est trop proche de celle du texte.

Il y a bien la solution de demander à l'utilisateur une couleur pour le texte en plus de la couleur de fond mais cela est contraignant, d'autant plus qu'il est facile d'automatiser cela.

Toute l'astuce tient dans un chiffre : 102. En effet, c'est la valeur décimale clé pour le canal vert de la couleur. Si la valeur est inférieure ou égale à 102, le texte doit être de couleur claire, sinon de couleur foncée. Cela peut se traduire ainsi en PHP :

function couleurTexte($couleur)
{
    $vert = hexdec(substr($couleur, 3, 2));
    return ($vert > 102) ? '#000000' : '#FFFFFF';
}

Cette fonction reçoit le code hexadécimal de la couleur de fond et retourne le code de la couleur du texte.

Enfin, pour les utilisateurs de Smarty, j'ai écrit ce petit plugin qui implémente cette fonctionnalité de manière un peu plus évoluée :

<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty {text_color} function plugin
*
* Type:     function<br>
* Name:     text_color<br>
* Date:     April 4, 2005<br>
* Purpose:  determinate the text color depending on the
                 background color<br>
* Input:
*         - bkg   = color of the background
*         - light = color for the light text (optional,
                       white is default)
*         - dark  = color for the dark text (optional,
                        black is default)
*
* Examples:<br>
* <pre>
* {text_color bkg=#FF0000}
* {text_color bkg=#FF00DE light=#CCCCCC dark=#333333}
* </pre>
*
* @link http://smarty.php.net/manual/en/language.function.
         text_color.php {text_color}
*       (Smarty online manual)
* @author Jean-Marc Fontaine <jmf at durcommefaire dot net>
* @version  1.0
* @param array
* @param Smarty
* @return string
*/
function smarty_function_text_color($params, &$smarty)
{
    if (substr($params['bkg'], 0, 1) != '#') {
        return 'inherit';
    }
   
    $green       = hexdec(substr($params['bkg'], 3, 2));
    $dark_color  = isset($params['dark']) ? $params['dark'] :
                                '#000000';
    $ligth_color = isset($params['light']) ? $params['light'] :
                               '#FFFFFF';
    return ($green > 102) ? $dark_color : $ligth_color;
}
/* vim: set expandtab: */
?>

mardi 12 avril 2005 à 13h45 - PHP Fil de syndication

Rétroliens

Aucun rétrolien pour le moment.

Les rétroliens pour ce billet sont fermés.

Commentaires

Gravatar de YoGi

ce chiffre (102) tu l'as choisi arbitrairement (parce que tu as constat? visuellement que c'?tait le plus adapt?) ou il y a une r?gle quelconque derri?re ?

YoGi le mardi 12 avril 2005 à 17h25 Icone du permalien

Gravatar de JMF

YoGi> Je cherchais depuis un moment comment d?terminer la valeur pivot autrement que par l'exp?rimentation et en parcourant le code du package PEAR Image_Color pour d'autres raisons, j'ai d?couvert cette valeur. Malheuseument, ils ne disent pas eux m?me d'o? ils l'a sortent.

Si quelqu'un a une explication ou un algo je suis preneur. :)

JMF le mardi 12 avril 2005 à 17h44 Icone du permalien

Gravatar de Mere Teresa

C'est extr?mement int?ressant ?a...
Merci !
Je n'en ai pas encore l'usage, mais je sais que je vais en avoir besoin dans pas longtemps : je suis sp?cialiste des d?veloppements de syst?mes de Mini-Sites...

Mere Teresa le mercredi 13 avril 2005 à 03h40 Icone du permalien

Ajouter un commentaire

Les commentaires pour ce billet sont fermés.

XHTML - CSS - DotClear - Technorati

Les billets de ce blog sont sous licence Creative Commons