/**
 * 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;
}
示例#2
0
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;
}
示例#3
0
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;
}