/**
 * Transforme une couleur hexa en vectorielle R,G,B
 *
 * @param string $couleur
 *     Code couleur en hexa (#000000 à #FFFFFF).
 * @return array
 *     Un tableau des 3 éléments : rouge, vert, bleu.
 */
function _couleur_hex_to_dec($couleur)
{
    $couleur = couleur_html_to_hex($couleur);
    $couleur = preg_replace(",^#,", "", $couleur);
    $retour["red"] = hexdec(substr($couleur, 0, 2));
    $retour["green"] = hexdec(substr($couleur, 2, 2));
    $retour["blue"] = hexdec(substr($couleur, 4, 2));
    return $retour;
}
Exemplo n.º 2
0
/**
 * Transforme une couleur hexa en vectorielle R,G,B
 *
 * @param string $couleur
 * @return string
 */
function geol_couleur_hex_to_dec($couleur)
{
    include_spip("inc/filtres_images_mini");
    $couleur = couleur_html_to_hex($couleur);
    $couleur = preg_replace(",^#,", "", $couleur);
    $retour["red"] = hexdec(substr($couleur, 0, 2));
    $retour["green"] = hexdec(substr($couleur, 2, 2));
    $retour["blue"] = hexdec(substr($couleur, 4, 2));
    return implode(',', $retour);
}
Exemplo n.º 3
0
function produire_image_typo()
{
    /*
    arguments autorises:
    
    $texte : le texte a transformer; attention: c'est toujours le premier argument, et c'est automatique dans les filtres
    $couleur : la couleur du texte dans l'image - pas de dieze
    $police: nom du fichier de la police (inclure terminaison)
    $largeur: la largeur maximale de l'image ; attention, l'image retournee a une largeur inferieure, selon les limites reelles du texte
    $hauteur_ligne: la hauteur de chaque ligne de texte si texte sur plusieurs lignes
    (equivalent a "line-height")
    $padding: forcer de l'espace autour du placement du texte; necessaire pour polices a la con qui "depassent" beaucoup de leur boite 
    $align: alignement left, right, center
    */
    /**
     * On définit les variables par défaut
     */
    $variables_defaut = array('align' => false, 'police' => '', 'largeur' => 0, 'hauteur_ligne' => 0, 'padding' => 0);
    // Recuperer les differents arguments
    $numargs = func_num_args();
    $arg_list = func_get_args();
    $texte = $arg_list[0];
    for ($i = 1; $i < $numargs; $i++) {
        if (($p = strpos($arg_list[$i], "=")) !== false) {
            $nom_variable = substr($arg_list[$i], 0, $p);
            $val_variable = substr($arg_list[$i], $p + 1);
            $variable["{$nom_variable}"] = $val_variable;
        }
    }
    $variable = array_merge($variables_defaut, $variable);
    // Construire requete et nom fichier
    $text = str_replace("&nbsp;", "~", $texte);
    $text = preg_replace(",(\r|\n)+,ms", " ", $text);
    include_spip('inc/charsets');
    $text = html2unicode(strip_tags($text));
    if (strlen($text) == 0) {
        return "";
    }
    $taille = $variable["taille"];
    if ($taille < 1) {
        $taille = 16;
    }
    $couleur = couleur_html_to_hex($variable["couleur"]);
    if (strlen($couleur) < 6) {
        $couleur = "000000";
    }
    $alt = $texte;
    $align = $variable["align"];
    if (!$variable["align"]) {
        $align = "left";
    }
    $police = $variable["police"];
    if (strlen($police) < 2) {
        $police = "dustismo.ttf";
    }
    $largeur = $variable["largeur"];
    if ($largeur < 5) {
        $largeur = 600;
    }
    if ($variable["hauteur_ligne"] > 0) {
        $hauteur_ligne = $variable["hauteur_ligne"];
    } else {
        $hauteur_ligne = 0;
    }
    if ($variable["padding"] > 0) {
        $padding = $variable["padding"];
    } else {
        $padding = 0;
    }
    $string = "{$text}-{$taille}-{$couleur}-{$align}-{$police}-{$largeur}-{$hauteur_ligne}-{$padding}";
    $query = md5($string);
    $dossier = sous_repertoire(_DIR_VAR, 'cache-texte');
    $fichier = "{$dossier}{$query}.png";
    $flag_gd_typo = function_exists("imageftbbox") && function_exists('imageCreateTrueColor');
    if (@file_exists($fichier)) {
        $image = $fichier;
    } else {
        if (!$flag_gd_typo) {
            return $texte;
        } else {
            $font = find_in_path('polices/' . $police);
            if (!$font) {
                spip_log(_T('fichier_introuvable', array('fichier' => $police)));
                $font = find_in_path('polices/' . "dustismo.ttf");
            }
            $imgbidon = imageCreateTrueColor($largeur, 45);
            $retour = printWordWrapped($imgbidon, $taille + 5, 0, $largeur, $font, $couleur, $text, $taille, 'left', $hauteur_ligne);
            $hauteur = $retour["height"];
            $largeur_reelle = $retour["width"];
            $espace = $retour["espace"];
            imagedestroy($imgbidon);
            $im = imageCreateTrueColor($largeur_reelle - $espace + 2 * $padding, $hauteur + 5 + 2 * $padding);
            imagealphablending($im, false);
            imagesavealpha($im, true);
            // Creation de quelques couleurs
            $grey2 = imagecolorallocatealpha($im, hexdec("0x{" . substr($couleur, 0, 2) . "}"), hexdec("0x{" . substr($couleur, 2, 2) . "}"), hexdec("0x{" . substr($couleur, 4, 2) . "}"), 127);
            ImageFilledRectangle($im, 0, 0, $largeur_reelle + 2 * $padding, $hauteur + 5 + 2 * $padding, $grey2);
            // Le texte a dessiner
            printWordWrapped($im, $taille + 5 + $padding, $padding, $largeur, $font, $couleur, $text, $taille, $align, $hauteur_ligne);
            // Utiliser imagepng() donnera un texte plus claire,
            // compare a l'utilisation de la fonction imagejpeg()
            _image_gd_output($im, array('fichier_dest' => $fichier, 'format_dest' => 'png'));
            imagedestroy($im);
            $image = $fichier;
        }
    }
    $dimensions = getimagesize($image);
    $largeur = $dimensions[0];
    $hauteur = $dimensions[1];
    return inserer_attribut("<img src='{$image}' width='{$largeur}' height='{$hauteur}' style='width:" . $largeur . "px;height:" . $hauteur . "px;' />", 'alt', $alt);
}