source: spip-zone/_core_/branches/spip-2.1/plugins/filtres_images/filtres/images_typo.php @ 52734

Last change on this file since 52734 was 52734, checked in by kent1@…, 8 years ago

Sécurité : éviter un full path disclosure (High-Tech Bridge Security Research Lab)

File size: 19.0 KB
Line 
1<?php
2/***************************************************************************\
3 *  SPIP, Systeme de publication pour l'internet                           *
4 *                                                                         *
5 *  Copyright (c) 2001-2009                                                *
6 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
7 *                                                                         *
8 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
9 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
10\***************************************************************************/
11
12if (!defined('_ECRIRE_INC_VERSION')) return;
13
14// librairie de base du core
15include_spip('inc/filtres_images_mini');
16
17
18// Image typographique
19// Fonctions pour l'arabe
20
21// http://doc.spip.org/@rtl_mb_ord
22function rtl_mb_ord($char){
23
24        if (($c = ord($char)) < 216) return $c;
25        else return 256 * rtl_mb_ord(substr($char, 0, -1)) + ord(substr($char, -1));
26
27        /*      return (strlen($char) < 2) ?
28                        ord($char) : 256 * mb_ord(substr($char, 0, -1))
29                                + ord(substr($char, -1));
30                               
31        */                     
32}
33
34
35// http://doc.spip.org/@rtl_reverse
36function rtl_reverse($mot, $rtl_global) {
37        $rtl_prec = $rtl_global;
38
39        $ponctuations = array("/", "-", "«","»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!", " ");
40        foreach($ponctuations as $ponct) {
41                $ponctuation[$ponct] = true;
42        }
43
44               
45
46        for ($i = 0; $i < spip_strlen($mot); $i++) {
47                $lettre = spip_substr($mot, $i, 1);
48               
49                $code = rtl_mb_ord($lettre);
50                # echo "<li>$lettre - $code";
51
52                if (($code >= 54928 && $code <= 56767) ||  ($code >= 15707294 && $code <= 15711164)) {
53                        $rtl = true;
54                }
55                else $rtl = false;
56               
57                if ($lettre == "٠" || $lettre == "١" || $lettre == "٢" || $lettre == "٣" || $lettre == "٤" || $lettre == "٥"
58                                 || $lettre == "٦" || $lettre == "٧" || $lettre == "٨" || $lettre == "٩") $rtl = false;
59               
60                if ($ponctuation[$lettre]) {
61                        # le truc mega casse-gueule de l'inversion unicode:
62                        # traiter le sens de placement en fonction de la lettre precedente
63                        # (et non automatiquement le rtl_global)
64                        $rtl = $rtl_prec;
65                       
66                        if ($rtl) {
67                                switch ($lettre) {
68                                        case "(": $lettre = ")"; break;
69                                        case ")": $lettre = "("; break;
70                                        case "«": $lettre = "»"; break;
71                                        case "»": $lettre = "«"; break;
72                                        case "“": $lettre = "”"; break;
73                                        case "”": $lettre = "“"; break;
74                                }
75                        }
76                }
77               
78               
79                if ($rtl) $res = $lettre.$res;
80                else $res = $res.$lettre;
81               
82                $rtl_prec = $rtl;
83               
84        }
85        return $res;
86}
87
88
89
90// http://doc.spip.org/@rtl_visuel
91function rtl_visuel($texte, $rtl_global) {
92        // hebreu + arabe: 54928 => 56767
93        // hebreu + presentation A: 15707294 => 15710140
94        // arabe presentation: 15708336 => 15711164
95       
96        #       echo hexdec("efb7bc");
97
98        // premiere passe pour determiner s'il y a du rtl
99        // de facon a placer ponctuation et mettre les mots dans l'ordre
100
101
102        $arabic_letters = array(
103                array("ي", // lettre 0
104                        "ﻱ",  // isolee 1
105                        "ﻳ", // debut 2
106                        "ﻴ", // milieu 3
107                        "ﻲ"),
108                array("ب", // lettre 0
109                        "ﺏ",  // isolee 1
110                        "ﺑ", // debut 2
111                        "ﺒ", // milieu 3
112                        "ﺐ"),
113                array("ا", // lettre 0
114                        "ا",  // isolee 1
115                        "ﺍ", // debut 2
116                        "ﺍ", // milieu 3
117                        "ﺎ"),
118                array("إ", // lettre 0
119                        "إ",  // isolee 1
120                        "إ", // debut 2
121                        "ﺈ", // milieu 3
122                        "ﺈ"),
123                array("ل", // lettre 0
124                        "ﻝ",  // isolee 1
125                        "ﻟ", // debut 2
126                        "ﻠ", // milieu 3
127                        "ﻞ"),
128                array("خ", // lettre 0
129                        "ﺥ",  // isolee 1
130                        "ﺧ", // debut 2
131                        "ﺨ", // milieu 3
132                        "ﺦ"),
133                array("ج", // lettre 0
134                        "ﺝ",  // isolee 1
135                        "ﺟ", // debut 2
136                        "ﺠ", // milieu 3
137                        "ﺞ"),
138                array("س", // lettre 0
139                        "ﺱ",  // isolee 1
140                        "ﺳ", // debut 2
141                        "ﺴ", // milieu 3
142                        "ﺲ"),
143                array("ن", // lettre 0
144                        "ﻥ",  // isolee 1
145                        "ﻧ", // debut 2
146                        "ﻨ", // milieu 3
147                        "ﻦ"),
148                array("ش", // lettre 0
149                        "ﺵ",  // isolee 1
150                        "ﺷ", // debut 2
151                        "ﺸ", // milieu 3
152                        "ﺶ"),
153                array("ق", // lettre 0
154                        "ﻕ",  // isolee 1
155                        "ﻗ", // debut 2
156                        "ﻘ", // milieu 3
157                        "ﻖ"),
158                array("ح", // lettre 0
159                        "ﺡ",  // isolee 1
160                        "ﺣ", // debut 2
161                        "ﺤ", // milieu 3
162                        "ﺢ"),
163                array("م", // lettre 0
164                        "ﻡ",  // isolee 1
165                        "ﻣ", // debut 2
166                        "ﻤ", // milieu 3
167                        "ﻢ"),
168                array("ر", // lettre 0
169                        "ر",  // isolee 1
170                        "ﺭ", // debut 2
171                        "ﺮ", // milieu 3
172                        "ﺮ"),
173                array("ع", // lettre 0
174                        "ع",  // isolee 1
175                        "ﻋ", // debut 2
176                        "ﻌ", // milieu 3
177                        "ﻊ"),
178                array("و", // lettre 0
179                        "و",  // isolee 1
180                        "ﻭ", // debut 2
181                        "ﻮ", // milieu 3
182                        "ﻮ"),
183                array("ة", // lettre 0
184                        "ة",  // isolee 1
185                        "ة", // debut 2
186                        "ﺔ", // milieu 3
187                        "ﺔ"),
188                array("ف", // lettre 0
189                        "ﻑ",  // isolee 1
190                        "ﻓ", // debut 2
191                        "ﻔ", // milieu 3
192                        "ﻒ"),
193                array("ﻻ", // lettre 0
194                        "ﻻ",  // isolee 1
195                        "ﻻ", // debut 2
196                        "ﻼ", // milieu 3
197                        "ﻼ"),
198                array("ح", // lettre 0
199                        "ﺡ",  // isolee 1
200                        "ﺣ", // debut 2
201                        "ﺤ", // milieu 3
202                        "ﺢ"),
203                array("ت", // lettre 0
204                        "ﺕ",  // isolee 1
205                        "ﺗ", // debut 2
206                        "ﺘ", // milieu 3
207                        "ﺖ"),
208                array("ض", // lettre 0
209                        "ﺽ",  // isolee 1
210                        "ﺿ", // debut 2
211                        "ﻀ", // milieu 3
212                        "ﺾ"),
213                array("ك", // lettre 0
214                        "ك",  // isolee 1
215                        "ﻛ", // debut 2
216                        "ﻜ", // milieu 3
217                        "ﻚ"),
218                array("ه", // lettre 0
219                        "ﻩ",  // isolee 1
220                        "ﻫ", // debut 2
221                        "ﻬ", // milieu 3
222                        "ﻪ"),
223                array("ي", // lettre 0
224                        "ي",  // isolee 1
225                        "ﻳ", // debut 2
226                        "ﻴ", // milieu 3
227                        "ﻲ"),
228                array("ئ", // lettre 0
229                        "ﺉ",  // isolee 1
230                        "ﺋ", // debut 2
231                        "ﺌ", // milieu 3
232                        "ﺊ"),
233                array("ص", // lettre 0
234                        "ﺹ",  // isolee 1
235                        "ﺻ", // debut 2
236                        "ﺼ", // milieu 3
237                        "ﺺ"),
238                array("ث", // lettre 0
239                        "ﺙ",  // isolee 1
240                        "ﺛ", // debut 2
241                        "ﺜ", // milieu 3
242                        "ﺚ"),
243                array("ﻷ", // lettre 0
244                        "ﻷ",  // isolee 1
245                        "ﻷ", // debut 2
246                        "ﻸ", // milieu 3
247                        "ﻸ"),
248                array("د", // lettre 0
249                        "ﺩ",  // isolee 1
250                        "ﺩ", // debut 2
251                        "ﺪ", // milieu 3
252                        "ﺪ"),
253                array("ذ", // lettre 0
254                        "ﺫ",  // isolee 1
255                        "ﺫ", // debut 2
256                        "ﺬ", // milieu 3
257                        "ﺬ"),
258                array("ط", // lettre 0
259                        "ﻁ",  // isolee 1
260                        "ﻃ", // debut 2
261                        "ﻄ", // milieu 3
262                        "ﻂ"),
263                array("آ", // lettre 0
264                        "آ",  // isolee 1
265                        "آ", // debut 2
266                        "ﺂ", // milieu 3
267                        "ﺂ"),
268                array("أ", // lettre 0
269                        "أ",  // isolee 1
270                        "أ", // debut 2
271                        "ﺄ", // milieu 3
272                        "ﺄ"),
273                array("ؤ", // lettre 0
274                        "ؤ",  // isolee 1
275                        "ؤ", // debut 2
276                        "ﺆ", // milieu 3
277                        "ﺆ"),
278                array("ز", // lettre 0
279                        "ز",  // isolee 1
280                        "ز", // debut 2
281                        "ﺰ", // milieu 3
282                        "ﺰ"),
283                array("ظ", // lettre 0
284                        "ظ",  // isolee 1
285                        "ﻇ", // debut 2
286                        "ﻈ", // milieu 3
287                        "ﻆ"),
288                array("غ", // lettre 0
289                        "غ",  // isolee 1
290                        "ﻏ", // debut 2
291                        "ﻐ", // milieu 3
292                        "ﻎ"),
293                array("ى", // lettre 0
294                        "ى",  // isolee 1
295                        "ﯨ", // debut 2
296                        "ﯩ", // milieu 3
297                        "ﻰ"),
298                array("پ", // lettre 0
299                        "پ",  // isolee 1
300                        "ﭘ", // debut 2
301                        "ﭙ", // milieu 3
302                        "ﭗ"),
303                array("چ", // lettre 0
304                        "چ",  // isolee 1
305                        "ﭼ", // debut 2
306                        "ﭽ", // milieu 3
307                        "ﭻ")
308        );
309       
310        if(init_mb_string() AND mb_regex_encoding() !== "UTF-8") echo "Attention: dans php.ini, il faut indiquer:<br /><strong>mbstring.internal_encoding = UTF-8</strong>";
311       
312       
313        $texte = explode(" ", $texte);
314       
315        foreach ($texte as $mot) {
316                $res = "";
317
318                // Inserer des indicateurs de debut/fin
319                $mot = "^".$mot."^";
320
321                $mot = preg_replace(",&nbsp;,u", " ", $mot);
322                $mot = preg_replace(",&#171;,u", "«", $mot);
323                $mot = preg_replace(",&#187;,u", "»", $mot);
324
325                // ponctuations
326                $ponctuations = array("/", "-", "«","»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!"," ");
327                foreach($ponctuations as $ponct) {
328                        $mot = str_replace("$ponct", "^$ponct^", $mot);
329                }
330
331                // lettres forcant coupure
332                $mot = preg_replace(",ا,u", "ا^", $mot);
333                $mot = preg_replace(",د,u", "د^", $mot);
334                $mot = preg_replace(",أ,u", "أ^", $mot);
335                $mot = preg_replace(",إ,u", "إ^", $mot);
336                $mot = preg_replace(",أ,u", "أ^", $mot);
337                $mot = preg_replace(",ر,u", "ر^", $mot);
338                $mot = preg_replace(",ذ,u", "ذ^", $mot);
339                $mot = preg_replace(",ز,u", "ز^", $mot);
340                $mot = preg_replace(",و,u", "و^", $mot);
341                $mot = preg_replace(",و,u", "و^", $mot);
342                $mot = preg_replace(",ؤ,u", "ؤ^", $mot);
343                $mot = preg_replace(",ة,u", "ة^", $mot);
344                //              $mot = preg_replace(",ل,u", "^ل", $mot);
345                //              $mot = preg_replace(",,", "^", $mot);
346
347
348                $mot = preg_replace(",٠,u", "^٠^", $mot);
349                $mot = preg_replace(",١,u", "^١^", $mot);
350                $mot = preg_replace(",٢,u", "^٢^", $mot);
351                $mot = preg_replace(",٣,u", "^٣^", $mot);
352                $mot = preg_replace(",٤,u", "^٤^", $mot);
353                $mot = preg_replace(",٥,u", "^٥^", $mot);
354                $mot = preg_replace(",٦,u", "^٦^", $mot);
355                $mot = preg_replace(",٧,u", "^٧^", $mot);
356                $mot = preg_replace(",٨,u", "^٨^", $mot);
357                $mot = preg_replace(",٩,u", "^٩^", $mot);
358
359
360                // Ligatures
361                $mot = preg_replace(",لا,u", "ﻻ", $mot);
362                $mot = preg_replace(",لأ,u", "ﻷ", $mot);
363               
364               
365                foreach ($arabic_letters as $a_l) {
366                        $mot = preg_replace(",([^\^])".$a_l[0]."([^\^]),u", "\\1".$a_l[3]."\\2", $mot);
367                        $mot = preg_replace(",\^".$a_l[0]."([^\^]),u", "^".$a_l[2]."\\1", $mot);
368                        $mot = preg_replace(",([^\^])".$a_l[0]."\^,u", "\\1".$a_l[4]."^", $mot);
369                        // il semble qu'il ne soit pas necessaire de remplacer
370                        // la lettre isolee
371                        //                      $mot = preg_replace(",\^".$a_l[0]."\^,u", "^".$a_l[1]."^", $mot);
372                }
373               
374                                $mot = preg_replace(",\^,u", "", $mot);
375               
376                $res = $mot;
377                $res = rtl_reverse($mot, $rtl_global);
378
379                /*
380                $rtl = false;           
381                for ($i = 0; $i < spip_strlen($mot); $i++) {
382                        $lettre = spip_substr($mot, $i, 1);
383                        $code = rtl_mb_ord($lettre);
384                        if (($code >= 54928 && $code <= 56767) ||  ($code >= 15708336 && $code <= 15711164)) $rtl = true;
385                }
386                */
387               
388               
389                if ($rtl_global) $retour = $res . " " . $retour;
390                else $retour = $retour. " ".$res;
391        }
392       
393       
394        return $retour;
395}
396
397
398// http://doc.spip.org/@printWordWrapped
399function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text, $textSize, $align="left", $hauteur_ligne = 0) {
400        static $memps = array();
401
402        // imageftbbox exige un float, et settype aime le double pour php < 4.2.0
403        settype($textSize, 'double');
404
405        // calculer les couleurs ici, car fonctionnement different selon TTF ou PS
406        $black = imagecolorallocatealpha($image, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 0);
407        $grey2 = imagecolorallocatealpha($image, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 127);
408
409        // Gaffe, T1Lib ne fonctionne carrement pas bien des qu'on sort de ASCII
410        // C'est dommage, parce que la rasterisation des caracteres est autrement plus jolie qu'avec TTF.
411        // A garder sous le coude en attendant que ca ne soit plus une grosse bouse.
412        // Si police Postscript et que fonction existe...
413        if (
414        false AND
415        strtolower(substr($font,-4)) == ".pfb"
416        AND function_exists("imagepstext")) {
417                // Traitement specifique pour polices PostScript (experimental)
418                $textSizePs = round(1.32 * $textSize);
419                if (!$fontps = $memps["$font"]) {
420                        $fontps = imagepsloadfont($font);
421                        // Est-ce qu'il faut reencoder? Pas testable proprement, alors...
422                        // imagepsencodefont($fontps,find_in_path('polices/standard.enc'));
423                        $memps["$font"] = $fontps;
424                }
425        }
426
427        $rtl_global = false;
428        for ($i = 0; $i < spip_strlen($text); $i++) {
429                $lettre = spip_substr($text, $i, 1);
430                $code = rtl_mb_ord($lettre);
431                if (($code >= 54928 && $code <= 56767) ||  ($code >= 15707294 && $code <= 15711164)) {
432                        $rtl_global = true;
433                }
434        }
435
436
437        // split the text into an array of single words
438        $words = explode(' ', $text);
439
440        // les espaces
441        foreach($words as $k=>$v)
442                $words[$k] = str_replace(array('~'), array(' '), $v);
443
444
445        if ($hauteur_ligne == 0) $lineHeight = floor($textSize * 1.3);
446        else $lineHeight = $hauteur_ligne;
447
448        $dimensions_espace = imageftbbox($textSize, 0, $font, ' ', array());
449        if ($dimensions_espace[2] < 0)
450                $dimensions_espace = imageftbbox($textSize, 0, $font, $line, array());
451        $largeur_espace = $dimensions_espace[2] - $dimensions_espace[0];
452        $retour["espace"] = $largeur_espace;
453
454
455        $line = '';
456        while (count($words) > 0) {
457               
458                $mot = $words[0];
459               
460                if ($rtl_global) $mot = rtl_visuel($mot,$rtl_global);
461       
462                $dimensions = imageftbbox($textSize, 0, $font, $line.' '.$mot, array());
463                $lineWidth = $dimensions[2] - $dimensions[0]; // get the length of this line, if the word is to be included
464                if ($lineWidth > $maxWidth) { // if this makes the text wider that anticipated
465                        $lines[] = $line; // add the line to the others
466                        $line = ''; // empty it (the word will be added outside the loop)
467                }
468                $line .= ' '.$words[0]; // add the word to the current sentence
469                $words = array_slice($words, 1); // remove the word from the array
470        }
471        if ($line != '') { $lines[] = $line; } // add the last line to the others, if it isn't empty
472        $height = count($lines) * $lineHeight; // the height of all the lines total
473        // do the actual printing
474        $i = 0;
475
476        // Deux passes pour recuperer, d'abord, largeur_ligne
477        // necessaire pour alignement right et center
478        foreach ($lines as $line) {
479                if ($rtl_global) $line = rtl_visuel($line, $rtl_global);
480               
481                $dimensions = imageftbbox($textSize, 0, $font, $line, array());
482                $largeur_ligne = $dimensions[2] - $dimensions[0];
483                if ($largeur_ligne > $largeur_max) $largeur_max = $largeur_ligne;
484        }
485
486        foreach ($lines as $i => $line) {
487                if ($rtl_global) $line = rtl_visuel($line, $rtl_global);
488
489                $dimensions = imageftbbox($textSize, 0, $font, $line, array());
490                $largeur_ligne = $dimensions[2] - $dimensions[0];
491                if ($align == "right") $left_pos = $largeur_max - $largeur_ligne;
492                else if ($align == "center") $left_pos = floor(($largeur_max - $largeur_ligne)/2);
493                else $left_pos = 0;
494               
495               
496                if ($fontps) {
497                        $line = trim($line);
498                        imagepstext ($image, "$line", $fontps, $textSizePs, $black, $grey2, $left + $left_pos, $top + $lineHeight * $i, 0, 0, 0, 16);
499                }
500                else imagefttext($image, $textSize, 0, $left + $left_pos, $top + $lineHeight * $i, $black, $font, trim($line), array());
501        }
502        $retour["height"] = $height;# + round(0.3 * $hauteur_ligne);
503        $retour["width"] = $largeur_max;
504                 
505        return $retour;
506}
507
508//array imagefttext ( resource image, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo] )
509//array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )
510
511// http://doc.spip.org/@produire_image_typo
512function produire_image_typo() {
513        /*
514        arguments autorises:
515       
516        $texte : le texte a transformer; attention: c'est toujours le premier argument, et c'est automatique dans les filtres
517        $couleur : la couleur du texte dans l'image - pas de dieze
518        $police: nom du fichier de la police (inclure terminaison)
519        $largeur: la largeur maximale de l'image ; attention, l'image retournee a une largeur inferieure, selon les limites reelles du texte
520        $hauteur_ligne: la hauteur de chaque ligne de texte si texte sur plusieurs lignes
521        (equivalent a "line-height")
522        $padding: forcer de l'espace autour du placement du texte; necessaire pour polices a la con qui "depassent" beaucoup de leur boite
523        $padding_vertical: forcer de l'espace autour du placement du texte en vertical; necessaire pour polices a la con qui "depassent" beaucoup de leur boite
524        $padding_horizontal: forcer de l'espace autour du placement du texte en horizontal; necessaire pour polices a la con qui "depassent" beaucoup de leur boite
525        $align: alignement left, right, center
526        */
527
528
529
530        // Recuperer les differents arguments
531        $numargs = func_num_args();
532        $arg_list = func_get_args();
533        $texte = $arg_list[0];
534        for ($i = 1; $i < $numargs; $i++) {
535                if (($p = strpos($arg_list[$i], "="))!==FALSE) {
536                        $nom_variable = substr($arg_list[$i], 0, $p);
537                        $val_variable = substr($arg_list[$i], $p+1);
538               
539                        $variable["$nom_variable"] = $val_variable;
540                }
541               
542        }
543
544        // Construire requete et nom fichier
545        $text = str_replace("&nbsp;", "~", $texte);     
546        $text = preg_replace(",(\r|\n)+,ms", " ", $text);
547        include_spip('inc/charsets');
548        $text = html2unicode(strip_tags($text));
549        if (strlen($text) == 0) return "";
550
551        $taille = $variable["taille"];
552        if ($taille < 1) $taille = 16;
553
554        $couleur = couleur_html_to_hex($variable["couleur"]);
555        if (strlen($couleur) < 6) $couleur = "000000";
556
557        $alt = $texte;
558               
559        $align = $variable["align"];
560        if (!$variable["align"]) $align="left";
561         
562        $police = $variable["police"];
563        if (strlen($police) < 2) $police = "dustismo.ttf";
564
565        $largeur = $variable["largeur"];
566        if ($largeur < 5) $largeur = 600;
567
568        if ($variable["hauteur_ligne"] > 0) $hauteur_ligne = $variable["hauteur_ligne"];
569        else $hauteur_ligne = 0;
570        if ($variable["padding"] > 0) $padding = $variable["padding"];
571        else $padding = 0;
572        if ($variable["padding_vertical"] > 0) $padding_vertical = $variable["padding_vertical"];
573        else $padding_vertical = 0;
574        if ($variable["padding_horizontal"] > 0) $padding_horizontal = $variable["padding_horizontal"];
575        else $padding_horizontal = 0;
576        if ($padding_horizontal == 0 AND $padding_vertical == 0 AND $padding > 0) {
577                $padding_horizontal = $padding;
578                $padding_vertical = $padding;
579        }
580
581
582        $string = "$text-$taille-$couleur-$align-$police-$largeur-$hauteur_ligne-$padding-$padding_vertical-$padding_horizontal";
583        $query = md5($string);
584        $dossier = sous_repertoire(_DIR_VAR, 'cache-texte');
585        $fichier = "$dossier$query.png";
586
587        $flag_gd_typo = function_exists("imageftbbox")
588                && function_exists('imageCreateTrueColor');
589
590       
591        if (@file_exists($fichier))
592                $image = $fichier;
593        else if (!$flag_gd_typo)
594                return $texte;
595        else {
596                $font = find_in_path('polices/'.$police);
597                if (!$font) {
598                        spip_log(_T('fichier_introuvable', array('fichier' => $police)));
599                        $font = find_in_path('polices/'."dustismo.ttf");
600                }
601
602                $imgbidon = imageCreateTrueColor($largeur, 45);
603                $retour = printWordWrapped($imgbidon, $taille+5, 0, $largeur, $font, $couleur, $text, $taille, 'left', $hauteur_ligne);
604                $hauteur = $retour["height"];
605                $largeur_reelle = $retour["width"];
606                $espace = $retour["espace"];
607                imagedestroy($imgbidon);
608
609                $im = imageCreateTrueColor($largeur_reelle-$espace+(2*$padding_horizontal), $hauteur+5+(2*$padding_vertical));
610                imagealphablending ($im, FALSE );
611                imagesavealpha ( $im, TRUE );
612               
613                // Creation de quelques couleurs
614               
615                $grey2 = imagecolorallocatealpha($im, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 127);
616                ImageFilledRectangle ($im,0,0,$largeur_reelle+(2*$padding_horizontal),$hauteur+5+(2*$padding_vertical),$grey2);
617               
618                // Le texte a dessiner
619                printWordWrapped($im, $taille+5+$padding_vertical, $padding_horizontal, $largeur, $font, $couleur, $text, $taille, $align, $hauteur_ligne);
620               
621               
622                // Utiliser imagepng() donnera un texte plus claire,
623                // compare a l'utilisation de la fonction imagejpeg()
624                _image_gd_output($im,array('fichier_dest'=>$fichier,'format_dest'=>'png'));
625                imagedestroy($im);
626               
627                $image = $fichier;
628        }
629
630
631        $dimensions = getimagesize($image);
632        $largeur = $dimensions[0];
633        $hauteur = $dimensions[1];
634       
635        return inserer_attribut("<img src='$image' width='$largeur' height='$hauteur' style='width:".$largeur."px;height:".$hauteur."px;' />", 'alt', $alt);
636}
637
638
639?>
Note: See TracBrowser for help on using the repository browser.