[SPIP] +2.1.12
[velocampus/web/www.git] / www / extensions / filtres_images / filtres / images_typo.php
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
12 if (!defined('_ECRIRE_INC_VERSION')) return;
13
14 // librairie de base du core
15 include_spip('inc/filtres_images_mini');
16
17
18 // Image typographique
19 // Fonctions pour l'arabe
20
21 // http://doc.spip.org/@rtl_mb_ord
22 function 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
36 function 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
91 function 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
399 function 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
512 function 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 ?>