source: spip-zone/_core_/branches/spip-3.0/plugins/filtres_images/filtres/images_typo.php @ 94397

Last change on this file since 94397 was 94397, checked in by denisb@…, 4 years ago

bonne année.

File size: 18.3 KB
Line 
1<?php
2/***************************************************************************\
3 *  SPIP, Systeme de publication pour l'internet                           *
4 *                                                                         *
5 *  Copyright (c) 2001-2016                                                *
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://code.spip.net/@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://code.spip.net/@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://code.spip.net/@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://code.spip.net/@printWordWrapped
399function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text, $textSize, $align="left", $hauteur_ligne = 0) {
400        static $memps = array();
401        $fontps = false;
402
403        // imageftbbox exige un float, et settype aime le double pour php < 4.2.0
404        settype($textSize, 'double');
405
406        // calculer les couleurs ici, car fonctionnement different selon TTF ou PS
407        $black = imagecolorallocatealpha($image, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 0);
408        $grey2 = imagecolorallocatealpha($image, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 127);
409
410        // Gaffe, T1Lib ne fonctionne carrement pas bien des qu'on sort de ASCII
411        // C'est dommage, parce que la rasterisation des caracteres est autrement plus jolie qu'avec TTF.
412        // A garder sous le coude en attendant que ca ne soit plus une grosse bouse.
413        // Si police Postscript et que fonction existe...
414        if (
415        false AND
416        strtolower(substr($font,-4)) == ".pfb"
417        AND function_exists("imagepstext")) {
418                // Traitement specifique pour polices PostScript (experimental)
419                $textSizePs = round(1.32 * $textSize);
420                if (!$fontps = $memps["$font"]) {
421                        $fontps = imagepsloadfont($font);
422                        // Est-ce qu'il faut reencoder? Pas testable proprement, alors...
423                        // imagepsencodefont($fontps,find_in_path('polices/standard.enc'));
424                        $memps["$font"] = $fontps;
425                }
426        }
427
428        $rtl_global = false;
429        for ($i = 0; $i < spip_strlen($text); $i++) {
430                $lettre = spip_substr($text, $i, 1);
431                $code = rtl_mb_ord($lettre);
432                if (($code >= 54928 && $code <= 56767) ||  ($code >= 15707294 && $code <= 15711164)) {
433                        $rtl_global = true;
434                }
435        }
436
437
438        // split the text into an array of single words
439        $words = explode(' ', $text);
440
441        // les espaces
442        foreach($words as $k=>$v)
443                $words[$k] = str_replace(array('~'), array(' '), $v);
444
445
446        if ($hauteur_ligne == 0) $lineHeight = floor($textSize * 1.3);
447        else $lineHeight = $hauteur_ligne;
448
449        $dimensions_espace = imageftbbox($textSize, 0, $font, ' ', array());
450        if ($dimensions_espace[2] < 0)
451                $dimensions_espace = imageftbbox($textSize, 0, $font, $line, array());
452        $largeur_espace = $dimensions_espace[2] - $dimensions_espace[0];
453        $retour["espace"] = $largeur_espace;
454
455
456        $line = '';
457        $lines = array();
458        while (count($words) > 0) {
459               
460                $mot = $words[0];
461               
462                if ($rtl_global) $mot = rtl_visuel($mot,$rtl_global);
463       
464                $dimensions = imageftbbox($textSize, 0, $font, $line.' '.$mot, array());
465                $lineWidth = $dimensions[2] - $dimensions[0]; // get the length of this line, if the word is to be included
466                if ($lineWidth > $maxWidth) { // if this makes the text wider that anticipated
467                        $lines[] = $line; // add the line to the others
468                        $line = ''; // empty it (the word will be added outside the loop)
469                }
470                $line .= ' '.$words[0]; // add the word to the current sentence
471                $words = array_slice($words, 1); // remove the word from the array
472        }
473        if ($line != '') { $lines[] = $line; } // add the last line to the others, if it isn't empty
474        $height = count($lines) * $lineHeight; // the height of all the lines total
475        // do the actual printing
476        $i = 0;
477
478        // Deux passes pour recuperer, d'abord, largeur_ligne
479        // necessaire pour alignement right et center
480        $largeur_max = 0;
481        foreach ($lines as $line) {
482                if ($rtl_global) $line = rtl_visuel($line, $rtl_global);
483               
484                $dimensions = imageftbbox($textSize, 0, $font, $line, array());
485                $largeur_ligne = $dimensions[2] - $dimensions[0];
486                if ($largeur_ligne > $largeur_max) $largeur_max = $largeur_ligne;
487        }
488
489        foreach ($lines as $i => $line) {
490                if ($rtl_global) $line = rtl_visuel($line, $rtl_global);
491
492                $dimensions = imageftbbox($textSize, 0, $font, $line, array());
493                $largeur_ligne = $dimensions[2] - $dimensions[0];
494                if ($align == "right") $left_pos = $largeur_max - $largeur_ligne;
495                else if ($align == "center") $left_pos = floor(($largeur_max - $largeur_ligne)/2);
496                else $left_pos = 0;
497               
498               
499                if ($fontps) {
500                        $line = trim($line);
501                        imagepstext ($image, "$line", $fontps, $textSizePs, $black, $grey2, $left + $left_pos, $top + $lineHeight * $i, 0, 0, 0, 16);
502                }
503                else imagefttext($image, $textSize, 0, $left + $left_pos, $top + $lineHeight * $i, $black, $font, trim($line), array());
504        }
505        $retour["height"] = $height;# + round(0.3 * $hauteur_ligne);
506        $retour["width"] = $largeur_max;
507                 
508        return $retour;
509}
510
511//array imagefttext ( resource image, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo] )
512//array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )
513
514// http://code.spip.net/@produire_image_typo
515function produire_image_typo() {
516        /*
517        arguments autorises:
518       
519        $texte : le texte a transformer; attention: c'est toujours le premier argument, et c'est automatique dans les filtres
520        $couleur : la couleur du texte dans l'image - pas de dieze
521        $police: nom du fichier de la police (inclure terminaison)
522        $largeur: la largeur maximale de l'image ; attention, l'image retournee a une largeur inferieure, selon les limites reelles du texte
523        $hauteur_ligne: la hauteur de chaque ligne de texte si texte sur plusieurs lignes
524        (equivalent a "line-height")
525        $padding: forcer de l'espace autour du placement du texte; necessaire pour polices a la con qui "depassent" beaucoup de leur boite
526        $align: alignement left, right, center
527        */
528
529
530
531        // Recuperer les differents arguments
532        $numargs = func_num_args();
533        $arg_list = func_get_args();
534        $texte = $arg_list[0];
535        for ($i = 1; $i < $numargs; $i++) {
536                if (($p = strpos($arg_list[$i], "="))!==FALSE) {
537                        $nom_variable = substr($arg_list[$i], 0, $p);
538                        $val_variable = substr($arg_list[$i], $p+1);
539               
540                        $variable["$nom_variable"] = $val_variable;
541                }
542               
543        }
544
545        // Construire requete et nom fichier
546        $text = str_replace("&nbsp;", "~", $texte);     
547        $text = preg_replace(",(\r|\n)+,ms", " ", $text);
548        include_spip('inc/charsets');
549        $text = html2unicode(strip_tags($text));
550        if (strlen($text) == 0) return "";
551
552        $taille = $variable["taille"];
553        if ($taille < 1) $taille = 16;
554
555        $couleur = couleur_html_to_hex($variable["couleur"]);
556        if (strlen($couleur) < 6) $couleur = "000000";
557
558        $alt = $texte;
559               
560        $align = $variable["align"];
561        if (!$variable["align"]) $align="left";
562         
563        $police = $variable["police"];
564        if (strlen($police) < 2) $police = "dustismo.ttf";
565
566        $largeur = $variable["largeur"];
567        if ($largeur < 5) $largeur = 600;
568
569        if ($variable["hauteur_ligne"] > 0) $hauteur_ligne = $variable["hauteur_ligne"];
570        else $hauteur_ligne = 0;
571        if ($variable["padding"] > 0) $padding = $variable["padding"];
572        else $padding = 0;
573       
574
575
576        $string = "$text-$taille-$couleur-$align-$police-$largeur-$hauteur_ligne-$padding";
577        $query = md5($string);
578        $dossier = sous_repertoire(_DIR_VAR, 'cache-texte');
579        $fichier = "$dossier$query.png";
580
581        $flag_gd_typo = function_exists("imageftbbox")
582                && function_exists('imageCreateTrueColor');
583
584       
585        if (@file_exists($fichier))
586                $image = $fichier;
587        else if (!$flag_gd_typo)
588                return $texte;
589        else {
590                $font = find_in_path('polices/'.$police);
591                if (!$font) {
592                        spip_log(_T('fichier_introuvable', array('fichier' => $police)));
593                        $font = find_in_path('polices/'."dustismo.ttf");
594                }
595
596                $imgbidon = imageCreateTrueColor($largeur, 45);
597                $retour = printWordWrapped($imgbidon, $taille+5, 0, $largeur, $font, $couleur, $text, $taille, 'left', $hauteur_ligne);
598                $hauteur = $retour["height"];
599                $largeur_reelle = $retour["width"];
600                $espace = $retour["espace"];
601                imagedestroy($imgbidon);
602
603                $im = imageCreateTrueColor($largeur_reelle-$espace+(2*$padding), $hauteur+5+(2*$padding));
604                imagealphablending ($im, FALSE );
605                imagesavealpha ( $im, TRUE );
606               
607                // Creation de quelques couleurs
608               
609                $grey2 = imagecolorallocatealpha($im, hexdec("0x{".substr($couleur, 0,2)."}"), hexdec("0x{".substr($couleur, 2,2)."}"), hexdec("0x{".substr($couleur, 4,2)."}"), 127);
610                ImageFilledRectangle ($im,0,0,$largeur_reelle+(2*$padding),$hauteur+5+(2*$padding),$grey2);
611               
612                // Le texte a dessiner
613                printWordWrapped($im, $taille+5+$padding, $padding, $largeur, $font, $couleur, $text, $taille, $align, $hauteur_ligne);
614               
615               
616                // Utiliser imagepng() donnera un texte plus claire,
617                // compare a l'utilisation de la fonction imagejpeg()
618                _image_gd_output($im,array('fichier_dest'=>$fichier,'format_dest'=>'png'));
619                imagedestroy($im);
620               
621                $image = $fichier;
622        }
623
624
625        $dimensions = getimagesize($image);
626        $largeur = $dimensions[0];
627        $hauteur = $dimensions[1];
628       
629        return inserer_attribut("<img src='$image' width='$largeur' height='$hauteur' style='width:".$largeur."px;height:".$hauteur."px;' />", 'alt', $alt);
630}
631
632
633?>
Note: See TracBrowser for help on using the repository browser.