source: spip-zone/_plugins_/creer_sprites_css/trunk/creer_sprites_fonctions.php @ 118007

Last change on this file since 118007 was 118007, checked in by jluc@…, 6 months ago

on passe creer_sprite_css en sous dossier v1.3 (reste stable) et on crée un trunk (en dev) pour corriger et améliorer

File size: 3.7 KB
Line 
1<?php
2
3$GLOBALS["sprites"] = false;
4
5function sprite ($img, $nom) {
6       
7
8        // Extraire le nom du fichier, soit directement soit dans <img src>
9        if (@file_exists($img)) $src = $img;   
10                else {
11                        $src = extraire_attribut($img, "src");
12                        $src = preg_replace(",\?[0-9]*$,", "", $src);
13                        // Si pas de fichier, ignorer
14                        if (!@file_exists($src)) return;
15                }
16               
17               
18        $GLOBALS["sprites"]["$nom"]["fichiers"][] = $src;
19       
20        $largeur = largeur($img);
21        $hauteur = hauteur($img);
22       
23        if ($largeur > $GLOBALS["sprites"]["$nom"]["largeur"]) $GLOBALS["sprites"]["$nom"]["largeur"] = $largeur;
24        $hauteur_old = max(0, $GLOBALS["sprites"]["$nom"]["hauteur"]);
25        $GLOBALS["sprites"]["$nom"]["hauteur"] += $hauteur;
26       
27        $alt = extraire_attribut($img, "alt");
28        $class = extraire_attribut($img, "class");
29        $fichier = sous_repertoire(_DIR_VAR, 'cache-sprites').$nom;
30        //$fichier .= "?m=spiprempdate[$fichier]";
31       
32        $date_src = @filemtime($src);
33        if ($date_src > $GLOBALS["sprites"]["$nom"]["date"]) $GLOBALS["sprites"]["$nom"]["date"] = $date_src;
34
35        return "<img src='".find_in_path("rien.gif")."' width='".$largeur."px' height='".$hauteur."px' style='width: ".$largeur."px; height: ".$hauteur."px; background: url($fichier) 0px -".$hauteur_old."px;' alt='$alt' class='$class' />";
36}
37
38function creer_sprites_terminaison_fichier_image($fichier) {
39        if (preg_match(",^(?>.*)(?<=\.(gif|jpg|png)),", $fichier, $regs)) {
40                $terminaison = $regs[1];
41                return $terminaison;
42        } else {
43                return false;
44        }
45
46}
47
48function creer_sprites($flux) {
49        $sprites = $GLOBALS["sprites"];
50        $page = $flux['data']['texte'];
51        if ($sprites) {
52                foreach($sprites as $key => $sprite) {
53                        $fichier = sous_repertoire(_DIR_VAR, 'cache-sprites').$key;
54                       
55                       
56                        $date_max = $sprite["date"];
57                        $date_src = @filemtime($fichier);
58                        $largeur = $sprite["largeur"];
59                        $hauteur = $sprite["hauteur"];
60       
61                        $creer = false;
62                        if ($date_src < $date_max) $creer = true;
63                        if ($largeur != largeur($fichier) || $hauteur != hauteur ($fichier)) $creer = true;
64                       
65                        if (in_array($_GET['var_mode'], array('recalcul', 'debug'))) $creer = true;
66                       
67                        if ($creer) { 
68                       
69                                include_spip('inc/filtres_images');
70                       
71                                $im = imagecreatetruecolor($largeur, $hauteur);         
72                                imagepalettetotruecolor($im);
73                                @imagealphablending($im, false); 
74                                @imagesavealpha($im,true); 
75                                $color_t = imagecolorallocatealpha( $im, 0, 0, 0 , 127 );
76                                imagefill ($im, 0, 0, $color_t);
77       
78                                $y_total = 0;
79                                foreach($sprite["fichiers"] as $img) {
80                               
81                                        $f = "imagecreatefrom".str_replace("jpg","jpeg",creer_sprites_terminaison_fichier_image($img));
82                                        $im_ = $f($img);
83                                        @imagepalettetotruecolor($im_);
84                                       
85                                        $x = imagesx($im_);
86                                        $y = imagesy($im_);
87                                       
88                                       
89                                        @ImageCopy($im, $im_, 0, $y_total, 0, 0, $x, $y);
90                                        $y_total += $y;
91                                }
92       
93                                $nom_fichier = substr($fichier, 0, strlen($fichier) - 4);
94                                _image_imagepng($im, "$nom_fichier.png");
95                                $f = creer_sprites_terminaison_fichier_image($fichier);
96                                if ($f != "png") {
97                                        $new = extraire_attribut( image_aplatir("$nom_fichier.png", $f, "ffffff"), "src");
98                                        @copy($new, $fichier);
99                                               
100                                }
101                                                               
102                                imagedestroy($im);
103                                imagedestroy($im_);
104       
105                        }
106                       
107                }
108        }
109       
110        // Mettre les dates des fichiers en variable de chaque appel
111        $page = preg_replace_callback(",spiprempdate\[([^\]]*)\],", "creer_sprites_remplacer_date", $page);
112       
113        $flux["data"]['texte'] = $page;
114        $GLOBALS["sprites"] = false;   
115        return $flux;   
116}
117
118
119function creer_sprites_remplacer_date($regs) {
120        $fichier = $regs[1];
121       
122        if ($date_fichier["$fichier"] > 0) {
123                return $date_fichier["$fichier"];
124        }
125        else {
126                $date_fichier["$fichier"] = @filemtime($fichier);
127                return $date_fichier["$fichier"];
128        }
129}
130
131function creer_sprites_recuperer_fond ($flux) {
132        return creer_sprites($flux);
133
134}
Note: See TracBrowser for help on using the repository browser.