/** * Finalise le traitement GD * * Crée un fichier_image temporaire .src ou vérifie que le fichier_image * définitif a bien été créé. * * @uses statut_effacer_images_temporaires() * * @param ressource $img * Une ressource de type Image GD. * @param array $valeurs * Un tableau des informations (tailles, traitement, path...) accompagnant * l'image. * @param int $qualite * N'est utilisé que pour les images jpg. * Le niveau de qualité du fichier résultant : de 0 (pire qualité, petit * fichier) à 100 (meilleure qualité, gros fichier). Par défaut, prend la * valeur (85) de la constante _IMG_GD_QUALITE (modifiable depuis * mes_options.php). * @return bool * - true si le traitement GD s'est bien finalisé ; * - false sinon. */ function _image_gd_output($img, $valeurs, $qualite = _IMG_GD_QUALITE) { $fonction = "_image_image" . $valeurs['format_dest']; $ret = false; #un flag pour reperer les images gravees $lock = !statut_effacer_images_temporaires('get') or @file_exists($valeurs['fichier_dest']) and !@file_exists($valeurs['fichier_dest'] . '.src'); if (function_exists($fonction) && ($ret = $fonction($img, $valeurs['fichier_dest'], $qualite)) && isset($valeurs['reconstruction']) && !$lock) { if (@file_exists($valeurs['fichier_dest'])) { // dans tous les cas mettre a jour la taille de l'image finale list($valeurs["hauteur_dest"], $valeurs["largeur_dest"]) = taille_image($valeurs['fichier_dest']); $valeurs['date'] = @filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition ecrire_fichier($valeurs['fichier_dest'] . '.src', serialize($valeurs), true); } } return $ret; }
function image_filtrer($args) { $filtre = array_shift($args); # enlever $filtre $texte = array_shift($args); if (!strlen($texte)) { return; } find_in_path('filtres_images_mini.php', 'inc/', true); statut_effacer_images_temporaires(true); // activer la suppression des images temporaires car le compilo finit la chaine par un image_graver // Cas du nom de fichier local if (strpos(substr($texte, strlen(_DIR_RACINE)), '..') === FALSE and !preg_match(',^/|[<>]|\\s,S', $texte) and (file_exists(preg_replace(',[?].*$,', '', $texte)) or preg_match(';^(\\w{3,7}://);', $texte))) { array_unshift($args, "<img src='{$texte}' />"); $res = call_user_func_array($filtre, $args); statut_effacer_images_temporaires(false); // desactiver pour les appels hors compilo return $res; } // Cas general : trier toutes les images, avec eventuellement leur <span> if (preg_match_all(',(<([a-z]+) [^<>]*spip_documents[^<>]*>)?\\s*(<img\\s.*>),UimsS', $texte, $tags, PREG_SET_ORDER)) { foreach ($tags as $tag) { $class = extraire_attribut($tag[3], 'class'); if (!$class || strpos($class, 'no_image_filtrer') === FALSE) { array_unshift($args, $tag[3]); if ($reduit = call_user_func_array($filtre, $args)) { // En cas de span spip_documents, modifier le style=...width: if ($tag[1]) { $w = extraire_attribut($reduit, 'width'); if (!$w and preg_match(",width:\\s*(\\d+)px,S", extraire_attribut($reduit, 'style'), $regs)) { $w = $regs[1]; } if ($w and $style = extraire_attribut($tag[1], 'style')) { $style = preg_replace(",width:\\s*\\d+px,S", "width:{$w}px", $style); $replace = inserer_attribut($tag[1], 'style', $style); $texte = str_replace($tag[1], $replace, $texte); } } // traiter aussi un eventuel mouseover if ($mouseover = extraire_attribut($reduit, 'onmouseover')) { if (preg_match(",this[.]src=['\"]([^'\"]+)['\"],ims", $mouseover, $match)) { $srcover = $match[1]; array_shift($args); array_unshift($args, "<img src='" . $match[1] . "' />"); $srcover_filter = call_user_func_array($filtre, $args); $srcover_filter = extraire_attribut($srcover_filter, 'src'); $reduit = str_replace($srcover, $srcover_filter, $reduit); } } $texte = str_replace($tag[3], $reduit, $texte); } array_shift($args); } } } statut_effacer_images_temporaires(false); // desactiver pour les appels hors compilo return $texte; }
function _image_gd_output($img,$valeurs, $qualite=_IMG_GD_QUALITE){ $fonction = "_image_image".$valeurs['format_dest']; $ret = false; #un flag pour reperer les images gravees $lock = !statut_effacer_images_temporaires('get') // si la fonction n'a pas ete activee, on grave tout OR (@file_exists($valeurs['fichier_dest']) AND !@file_exists($valeurs['fichier_dest'].'.src')); if ( function_exists($fonction) && ($ret = $fonction($img,$valeurs['fichier_dest'],$qualite)) # on a reussi a creer l'image && isset($valeurs['reconstruction']) # et on sait comment la resonctruire le cas echeant && !$lock ) if (@file_exists($valeurs['fichier_dest'])){ // dans tous les cas mettre a jour la taille de l'image finale list ($valeurs["hauteur_dest"],$valeurs["largeur_dest"]) = taille_image($valeurs['fichier_dest']); $valeurs['date'] = filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition ecrire_fichier($valeurs['fichier_dest'].'.src',serialize($valeurs),true); } return $ret; }