/** * 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; }
/** * 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); }
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(" ", "~", $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); }