/**
 * html Pour pouvoir masquer les logos sans les downloader en petit ecran
 * il faut le mettre dans un conteneur parent que l'on masque
 * http://timkadlec.com/2012/04/media-query-asset-downloading-results/
 *
 * On utilise un double conteneur :
 * le premier fixe la largeur, le second la hauteur par le ratio hauteur/largeur
 * grace a la technique des intrinsic-ratio ou padding-bottom-hack
 * http://mobile.smashingmagazine.com/2013/09/16/responsive-images-performance-problem-case-study/
 * http://alistapart.com/article/creating-intrinsic-ratios-for-video
 *
 * Le span interieur porte l'image en background CSS
 * Le span conteneur ne porte pas de style display car trop prioritaire.
 * Sans CSS il occupe la largeur complete disponible, car en inline par defaut
 * Il suffit de lui mettre un float:xxx ou un display:block pour qu'il respecte la largeur initiale du logo
 *
 * Pour masquer les logos :
 * .spip_logos {display:none}
 * Pour forcer une taille maxi :
 * .spip_logos {max-width:25%;float:right}
 *
 * @param $logo
 *
 * @return string
 */
function responsive_logo($logo)
{
    if (!function_exists('extraire_balise')) {
        include_spip('inc/filtres');
    }
    if (!$logo or !($img = extraire_balise($logo, "img"))) {
        return $logo;
    }
    list($h, $w) = taille_image($img);
    $src = extraire_attribut($img, "src");
    $class = extraire_attribut($img, "class");
    // timestamper l'url si pas deja fait
    if (strpos($src, "?") == false) {
        $src = timestamp($src);
    }
    if (defined('_STATIC_IMAGES_DOMAIN')) {
        $src = url_absolue($src, _STATIC_IMAGES_DOMAIN);
    }
    $hover = "";
    if ($hover_on = extraire_attribut($img, "onmouseover")) {
        $hover_off = extraire_attribut($img, "onmouseout");
        $hover_on = str_replace("this.src=", "jQuery(this).css('background-image','url('+", $hover_on) . "+')')";
        $hover_off = str_replace("this.src=", "jQuery(this).css('background-image','url('+", $hover_off) . "+')')";
        $hover = " onmouseover=\"{$hover_on}\" onmouseout=\"{$hover_off}\"";
    }
    $ratio = round($h * 100 / $w, 2);
    return "<span class='{$class}' style=\"width:{$w}px;\"><span class=\"img\" style=\"display:block;position:relative;height:0;width:100%;padding-bottom:{$ratio}%;overflow:hidden;background:url({$src}) no-repeat center;background-size:100%;\"{$hover}> </span></span>";
}
Example #2
0
/**
 * Tourner un document
 *
 * http://code.spip.net/@action_tourner_post
 *
 * @param int $id_document
 * @param int $angle
 *   angle de rotation en degre>0
 * @return
 */
function action_tourner_post($id_document, $angle)
{
    $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=" . intval($id_document));
    if (!$row) {
        return;
    }
    include_spip('inc/charsets');
    # pour le nom de fichier
    include_spip('inc/documents');
    // Fichier destination : on essaie toujours de repartir de l'original
    $var_rot = $angle;
    $effacer = false;
    include_spip('inc/distant');
    # pour copie_locale
    $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier']));
    if (preg_match(',^(.*)-r(90|180|270)\\.([^.]+)$,', $src, $match)) {
        $effacer = $src;
        $src = $match[1] . '.' . $match[3];
        $var_rot += intval($match[2]);
    }
    $var_rot = (360 + $var_rot) % 360;
    // 0, 90, 180 ou 270
    if ($var_rot > 0) {
        $dest = preg_replace(',\\.[^.]+$,', '-r' . $var_rot . '$0', $src);
        spip_log("rotation {$var_rot} {$src} : {$dest}");
        include_spip('inc/filtres');
        include_spip('public/parametrer');
        // charger les fichiers fonctions #bugfix spip 2.1.0
        $res = filtrer('image_rotation', $src, $var_rot);
        $res = filtrer('image_format', $res, $row['extension']);
        list($hauteur, $largeur) = taille_image($res);
        $res = extraire_attribut($res, 'src');
        include_spip('inc/getdocument');
        deplacer_fichier_upload($res, $dest);
    } else {
        $dest = $src;
        $size_image = @getimagesize($dest);
        $largeur = $size_image[0];
        $hauteur = $size_image[1];
    }
    // succes !
    if ($largeur > 0 and $hauteur > 0) {
        $set = array('fichier' => set_spip_doc($dest), 'largeur' => $largeur, 'hauteur' => $hauteur, 'distant' => 'non');
        if ($taille = @filesize($dest)) {
            $set['taille'] = $taille;
        }
        sql_updateq('spip_documents', $set, "id_document=" . intval($id_document));
        if ($effacer) {
            spip_log("rotation : j'efface {$effacer}");
            spip_unlink($effacer);
        }
        // pipeline pour les plugins
        pipeline('post_edition', array('args' => array('table' => 'spip_documents', 'table_objet' => 'documents', 'spip_table_objet' => 'spip_documents', 'type' => 'document', 'id_objet' => $id_document, 'champs' => array('rotation' => $angle, 'orientation' => $var_rot, 'fichier' => $row['fichier']), 'action' => 'tourner'), 'data' => $set));
    }
}
Example #3
0
/**
 * une fonction pour generer une balise img a partir d'un nom de fichier
 *
 * @param string $img
 * @param string $alt
 * @param string $class
 * @return string
 */
function filtre_balise_img_dist($img,$alt="",$class=""){
	$taille = taille_image($img);
	list($hauteur,$largeur) = $taille;
	if (!$hauteur OR !$largeur)
		return "";
	return
	"<img src='$img' width='$largeur' height='$hauteur'"
	  ." alt='".attribut_html($alt)."'"
	  .($class?" class='".attribut_html($class)."'":'')
	  .' />';
}
Example #4
0
/**
 * produit une balise img avec un champ alt d'office si vide
 * attention le htmlentities et la traduction doivent etre appliques avant.
 *
 * http://doc.spip.org/@http_img_pack
 *
 * @param $img
 * @param $alt
 * @param string $atts
 * @param string $title
 * @param array $options
 *   chemin_image : utiliser chemin_image sur $img fourni, ou non (oui par dafaut)
 *   utiliser_suffixe_size : utiliser ou non le suffixe de taille dans le nom de fichier de l'image
 *   sous forme -xx.png (pour les icones essentiellement) (oui par defaut)
 * @return string
 */
function http_img_pack($img, $alt, $atts = '', $title = '', $options = array())
{
    if (!isset($options['chemin_image']) or $options['chemin_image'] == true) {
        $img = chemin_image($img);
    }
    if (stripos($atts, 'width') === false) {
        // utiliser directement l'info de taille presente dans le nom
        if ((!isset($options['utiliser_suffixe_size']) or $options['utiliser_suffixe_size'] == true) and preg_match(',-([0-9]+)[.](png|gif)$,', $img, $regs)) {
            $largeur = $hauteur = intval($regs[1]);
        } else {
            $taille = taille_image($img);
            list($hauteur, $largeur) = $taille;
            if (!$hauteur or !$largeur) {
                return "";
            }
        }
        $atts .= " width='" . $largeur . "' height='" . $hauteur . "'";
    }
    return "<img src='{$img}' alt='" . attribut_html($alt ? $alt : $title) . "'" . ($title ? ' title="' . attribut_html($title) . '"' : '') . " " . ltrim($atts) . " />";
}
/**
 * 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_imagick()
{
    $tous = func_get_args();
    $img = $tous[0];
    $fonc = $tous[1];
    $tous[0] = "";
    $tous_var = join($tous, "-");
    $fonction = array('image_imagick', func_get_args());
    $image = _image_valeurs_trans($img, "{$tous_var}", "png", $fonction);
    if (!$image) {
        return "";
    }
    $im = $image["fichier"];
    $dest = $image["fichier_dest"];
    $creer = $image["creer"];
    if ($creer) {
        if (function_exists($fonc)) {
            $handle = imagick_readimage($im);
            $arr[0] = $handle;
            for ($i = 2; $i < count($tous); $i++) {
                $arr[] = $tous[$i];
            }
            call_user_func_array($fonc, $arr);
            // Creer image dans fichier temporaire, puis renommer vers "bon" fichier
            // de facon a eviter time_out pendant creation de l'image definitive
            $tmp = preg_replace(",[.]png\$,i", "-tmp.png", $dest);
            imagick_writeimage($handle, $tmp);
            rename($tmp, $dest);
            ecrire_fichier($dest . ".src", serialize($image));
        }
    }
    list($src_y, $src_x) = taille_image($dest);
    return _image_ecrire_tag($image, array('src' => $dest, 'width' => $src_x, 'height' => $src_y));
}
Example #7
0
/**
 * Réduit les images d'un certain facteur
 * 
 * @see image_reduire()
 *
 * @param string $img
 *     Chemin de l'image ou texte
 * @param int $val
 *     Facteur de réduction
 * @param bool $force
 * @return string
 *     Code HTML de l'image ou du texte.
**/
function image_reduire_par($img, $val = 1, $force = false)
{
    list($hauteur, $largeur) = taille_image($img);
    $l = round($largeur / $val);
    $h = round($hauteur / $val);
    if ($l > $h) {
        $h = 0;
    } else {
        $l = 0;
    }
    $img = image_reduire($img, $l, $h, $force);
    return $img;
}
Example #8
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;
}