source: spip-zone/_core_/plugins/filtres_images/filtres/images_typo.php

Last change on this file was 113294, checked in by spip.franck@…, 4 months ago

Il parait que le futur c'est maintenant :-D

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