Browse Source

hop passage en (bienvenue) + griffe + optimisation qui restait

master
jluc@no-log.org 3 years ago
parent
commit
b43b84d099
  1. 116
      creer_sprites_fonctions.php
  2. 5
      paquet.xml

116
creer_sprites_fonctions.php

@ -4,8 +4,8 @@ $GLOBALS['sprites'] = false;
/**
* @param $img image à intégrer au sprite
* @param $nom nom du fichier sprite
* @param $img string image à intégrer au sprite
* @param $nom string nom du fichier sprite
* @return string|void source de la balise <img> dont le src est vide
* et dont le background du style fait référence au sprite, avec le bon offset
* et un marqueur pour le timestamp
@ -77,74 +77,77 @@ function creer_sprites($flux) {
* @param string $page
* @return string la page modifiée
*
* Crée les fichiers sprites à partir de toutes les informations collectées
* Crée les fichiers sprites à partir des informations collectées par les appels de |sprite
* et remplace les marqueurs de datage par le timestamp du fichier sprite
*
* Appelé par défaut le pipeline affichage_final
* @used-by creer_sprites_affichage_final
* Appelé via le pipeline affichage_final
* Peut aussi être appelé par un #FILTRE si on veut forcer au niveau d'un squelette
*/
function filtre_creer_sprites($page) {
if ($sprites = $GLOBALS['sprites']) {
foreach ($sprites as $key => $sprite) {
$fichier_sprite = sous_repertoire(_DIR_VAR, 'cache-sprites').$key;
$nom_fichier_sprite = substr($fichier_sprite, 0, strlen($fichier_sprite) - 4);
if (!count($GLOBALS['sprites'])) {
return $page;
}
$sprites = $GLOBALS['sprites'];
$date_max = $sprite['date'];
$date_src = @filemtime($fichier_sprite);
$largeur = $sprite['largeur'];
$hauteur = $sprite['hauteur'];
foreach ($sprites as $key => $sprite) {
$fichier_sprite = sous_repertoire(_DIR_VAR, 'cache-sprites').$key;
$nom_fichier_sprite = substr($fichier_sprite, 0, strlen($fichier_sprite) - 4);
$creer = false;
$date_max = $sprite['date'];
$date_src = @filemtime($fichier_sprite);
$largeur = $sprite['largeur'];
$hauteur = $sprite['hauteur'];
// On recalcule le sprite si l'un des fichiers qui le compose est plus récent que le sprite
if ($date_src < $date_max) {
$creer = true;
}
if ($largeur != largeur($fichier_sprite) || $hauteur != hauteur($fichier_sprite)) {
$creer = true;
}
$creer = false;
// On recalcule le sprite si l'un des fichiers qui le compose est plus récent que le sprite
if ($date_src < $date_max) {
$creer = true;
}
if ($largeur != largeur($fichier_sprite) || $hauteur != hauteur($fichier_sprite)) {
$creer = true;
}
if (!empty($_GET['var_mode'])
and in_array($_GET['var_mode'], array('recalcul', 'debug'))) {
$creer = true;
}
if ($creer) {
include_spip('inc/filtres_images');
$im = imagecreatetruecolor($largeur, $hauteur);
imagepalettetotruecolor($im);
@imagealphablending($im, false);
@imagesavealpha($im, true);
$color_t = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $color_t);
$y_total = 0;
foreach ($sprite['fichiers'] as $img) {
$f = 'imagecreatefrom'.str_replace('jpg', 'jpeg', creer_sprites_terminaison_fichier_image($img));
$im_tmp = $f($img);
@imagepalettetotruecolor($im_tmp);
if (!empty($_GET['var_mode'])
and in_array($_GET['var_mode'], array('recalcul', 'debug'))) {
$creer = true;
$x = imagesx($im_tmp);
$y = imagesy($im_tmp);
@ImageCopy($im, $im_tmp, 0, $y_total, 0, 0, $x, $y);
$y_total += $y;
}
if ($creer) {
include_spip('inc/filtres_images');
$im = imagecreatetruecolor($largeur, $hauteur);
imagepalettetotruecolor($im);
@imagealphablending($im, false);
@imagesavealpha($im, true);
$color_t = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $color_t);
$y_total = 0;
foreach ($sprite['fichiers'] as $img) {
$f = 'imagecreatefrom'.str_replace('jpg', 'jpeg', creer_sprites_terminaison_fichier_image($img));
$im_tmp = $f($img);
@imagepalettetotruecolor($im_tmp);
$x = imagesx($im_tmp);
$y = imagesy($im_tmp);
@ImageCopy($im, $im_tmp, 0, $y_total, 0, 0, $x, $y);
$y_total += $y;
}
_image_imagepng($im, "$nom_fichier_sprite.png");
$ext = creer_sprites_terminaison_fichier_image($fichier_sprite);
if ($ext != 'png') {
$new = extraire_attribut(image_aplatir("$nom_fichier_sprite.png", $ext, 'ffffff'), 'src');
$ok = copy($new, $fichier_sprite);
}
imagedestroy($im);
imagedestroy($im_tmp);
_image_imagepng($im, "$nom_fichier_sprite.png");
$ext = creer_sprites_terminaison_fichier_image($fichier_sprite);
if ($ext != 'png') {
$new = extraire_attribut(image_aplatir("$nom_fichier_sprite.png", $ext, 'ffffff'), 'src');
copy($new, $fichier_sprite);
}
imagedestroy($im);
imagedestroy($im_tmp);
}
}
// Mettre les dates des fichiers en variable de chaque appel
$page = preg_replace_callback(',spiprempdate\[([^\]]*)\],', 'creer_sprites_remplacer_date', $page);
@ -173,6 +176,7 @@ static $date_fichier=array();
* @return string
*
* Pipeline pour calculer les sprites et les timestamp
* @uses filtre_creer_sprites
*/
function creer_sprites_affichage_final($page) {
return filtre_creer_sprites($page);

5
paquet.xml

@ -1,8 +1,8 @@
<paquet
prefix="creer_sprites"
categorie="multimedia"
version="1.4.2"
etat="dev"
version="2.0.0"
etat="test"
compatibilite="[3.2.0;3.3.*]"
documentation="http://www.paris-beyrouth.org/tutoriaux-spip/article/plugin-creer-sprites-css"
>
@ -10,6 +10,7 @@
<nom>Cr&#233;er sprites CSS</nom>
<auteur>ARNO*</auteur>
<auteur>JLuc</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-2.0.html">GPL</licence>
<pipeline nom="affichage_final" inclure="creer_sprites_fonctions.php" />

Loading…
Cancel
Save