IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Dessiner un texte avec une police TrueType


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Dessiner un texte avec une police TrueType
    Bonjour,
    J'aimerais améliorer le rendu du texte de mes images.
    Je pensais pouvoir m'en sortir avec "imagettftext" en déclarent une police "$font = 'arial.ttf';", mais je ne m'en sort pas.
    Pourriez-vous m'aider ?
    Le code (image.php).

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
    header("Content-type: image/png");
     
    $offsetGauche = 25;
    $offsetDroit = 15;
     
    $width = (isset($_GET['width']) ? $_GET['width'] : 240);
    $height = (isset($_GET['height']) ? $_GET['height'] : 35);
     
    $prog = (isset($_GET['prog']) ? $_GET['prog'] : '');
     
    $title = (isset($_GET['title']) ? $_GET['title'] : ' ');
     
    $n = intval(($width - $offsetGauche - $offsetDroit) / 24);
    $taille = $n * 24;
     
    $image = imagecreate($width, $height);
     
    $blanc = imagecolorallocate($image, 255, 255, 255);
     
    $orange = imagecolorallocate($image, 247, 163, 92);
    $rouge = imagecolorallocate($image, 255, 0, 0);
    $bleuclair = imagecolorallocate($image, 124, 182, 236);
     
    $gris = imagecolorallocate($image, 128, 128, 128);
    $grisClair = imagecolorallocate($image, 192, 192, 192);
    $noir = imagecolorallocate($image, 0, 0, 0);
     
    for ($i=0; $i<=24; $i++) {
        $x = $i*$n+$offsetGauche;
        if (($i % 6) == 0) {
            ImageLine($image, $x, 15, $x, 25, $gris);
            if ($i < 12) {
                $str = '0' . $i . ':00';
            } else {
                $str = $i . ':00';
            }
            imagestring($image, 2, $x-15, 0, $str, $noir);
        } else {
            ImageLine($image, $x, 20, $x, 25, $grisClair);
        }
    }
    imagestring($image, 2, 0, 20, $title, $noir);
     
    imagefilledrectangle($image, $offsetGauche, 26, $taille + $offsetGauche, 35, $bleuclair);
     
    if ($prog !== '') {
        $progs = explode(",", $prog);
        $n = count($progs);
        if (($n % 3) == 0) {
            for ($i=0; $i<$n; $i+=3) {
                $mode = $progs[$i];
                $start = $progs[$i+1];
                $end = $progs[$i+2];
                $nombres = explode(":", $start);
                $debut = $nombres[0] * 60 + $nombres[1];
                $debut = $offsetGauche + $taille * $debut / 1440;
                $nombres = explode(":", $end);
                $fin = $nombres[0] * 60 + $nombres[1];
                $fin = $offsetGauche + $taille * $fin / 1440;
                if ($mode === 'n') {
                    imagefilledrectangle($image, $debut, 26, $fin, 35, $orange);
                } else {
                    imagefilledrectangle($image, $debut, 26, $fin, 35, $rouge);
                }
            }
        }
    }
    imagepng($image);
    Dernière modification par ProgElecT ; 16/03/2022 à 20h58. Motif: Pour le code balises [code] ici votre code [/code], touche # de l'éditeur, NON FACULTATIF

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    J'ai essayé ce qui suit, mais sans arriver à mes fins.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <?php
    header("Content-type: image/png");
     
    $offsetGauche = 25;
    $offsetDroit = 15;
     
    $width = (isset($_GET['width']) ? $_GET['width'] : 240);
    $height = (isset($_GET['height']) ? $_GET['height'] : 35);
     
    $prog = (isset($_GET['prog']) ? $_GET['prog'] : '');
     
    $title = (isset($_GET['title']) ? $_GET['title'] : ' ');
     
    $n = intval(($width - $offsetGauche - $offsetDroit) / 24);
    $taille = $n * 24;
     
    // $image = imagecreate($width, $height);
    $image = imagecreatetruecolor($width, $height);
     
    $blanc = imagecolorallocate($image, 255, 255, 255);
     
    $orange = imagecolorallocate($image, 247, 163, 92);
    $rouge = imagecolorallocate($image, 255, 0, 0);
    $bleuclair = imagecolorallocate($image, 124, 182, 236);
     
    $gris = imagecolorallocate($image, 128, 128, 128);
    $grisClair = imagecolorallocate($image, 192, 192, 192);
    $noir = imagecolorallocate($image, 0, 0, 0);
     
     
    // Définition de la variable d'environnement pour GD
    putenv('GDFONTPATH=' . realpath('.'));
     
    // Nom de la police à utiliser (notez l'absence de l'extension .ttf)
    $font = 'arial';	// mettre le fichier arial.ttf dans le même répertoire que le script.
     
     
    for ($i=0; $i<=24; $i++) {
        $x = $i*$n+$offsetGauche;
        if (($i % 6) == 0) {
            ImageLine($image, $x, 15, $x, 25, $gris);
            if ($i < 12) {
                $str = '0' . $i . ':00';
            } else {
                $str = $i . ':00';
            }
     
            // imagestring($image, 2, $x-15, 0, $str, $noir);
    		imagefttext($image, 14, 0, $x-15, 0, $noir, $font, $str);
     
        } else {
            ImageLine($image, $x, 20, $x, 25, $grisClair);
        }
    }
    // imagestring($image, 2, 0, 20, $title, $noir);
    imagefttext($image, 14, 0, 20, 0, $noir, $font, $title);
     
    imagefilledrectangle($image, $offsetGauche, 26, $taille + $offsetGauche, 35, $bleuclair);
     
    if ($prog !== '') {
        $progs = explode(",", $prog);
        $n = count($progs);
        if (($n % 3) == 0) {
            for ($i=0; $i<$n; $i+=3) {
                $mode = $progs[$i];
                $start = $progs[$i+1];
                $end = $progs[$i+2];
                $nombres = explode(":", $start);
                $debut = $nombres[0] * 60 + $nombres[1];
                $debut = $offsetGauche + $taille * $debut / 1440;
                $nombres = explode(":", $end);
                $fin = $nombres[0] * 60 + $nombres[1];
                $fin = $offsetGauche + $taille * $fin / 1440;
                if ($mode === 'n') {
                    imagefilledrectangle($image, $debut, 26, $fin, 35, $orange);
                } else {
                    imagefilledrectangle($image, $debut, 26, $fin, 35, $rouge);
                }
            }
        }
    }
    imagepng($image);

    Voyez-vous ou je fais erreur ?
    Bien cordialement

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Petit complément qui peut peut-être aider:
    Je tourne sous WampServer et la Librairie GD et décommandée sous php.ini (extension=gd2).
    Dernière modification par Invité ; 17/03/2022 à 20h18.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je pense que j'y suis presque, mais ne parviens pas à afficher mon texte.
    J'aurais vraiment besoin de votre expertise.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <?php
    header("Content-type: image/png");
     
    $offsetGauche = 25;
    $offsetDroit = 15;
     
    $width = (isset($_GET['width']) ? $_GET['width'] : 240);
    $height = (isset($_GET['height']) ? $_GET['height'] : 35);
     
    $prog = (isset($_GET['prog']) ? $_GET['prog'] : '');
     
    $title = (isset($_GET['title']) ? $_GET['title'] : ' ');
     
    $n = intval(($width - $offsetGauche - $offsetDroit) / 24);
    $taille = $n * 24;
     
    // $image = imagecreate($width, $height);
    $image = imagecreatetruecolor($width, $height);
     
    //Pour fond transparent
    imagealphablending($image, false);
    imagesavealpha($image, true);
    $col=imagecolorallocatealpha($image,255,255,255,127);
    imagefill($image, 0, 0, $col);
     
    $blanc = imagecolorallocate($image, 255, 255, 255);
     
    $orange = imagecolorallocate($image, 247, 163, 92);
    $rouge = imagecolorallocate($image, 255, 0, 0);
    $bleuclair = imagecolorallocate($image, 124, 182, 236);
     
    $gris = imagecolorallocate($image, 128, 128, 128);
    $grisClair = imagecolorallocate($image, 192, 192, 192);
    $noir = imagecolorallocate($image, 0, 0, 0);
     
     
    // Définition de la variable d'environnement pour GD
    // putenv('GDFONTPATH=' . realpath('.'));
     
    // Nom de la police à utiliser (notez l'absence de l'extension .ttf)
    // $font = 'arial';	// mettre le fichier arial.ttf dans le même répertoire que le script.
    $font = getcwd().'/arial.ttf';
    //$font = "C:\wamp64\www\projet\Viessmann\images\arial.ttf";
     
     
    for ($i=0; $i<=24; $i++) {
        $x = $i*$n+$offsetGauche;
        if (($i % 6) == 0) {
            ImageLine($image, $x, 15, $x, 25, $gris);
            if ($i < 12) {
                $str = '0' . $i . ':00';
            } else {
                $str = $i . ':00';
            }
     
            // imagestring($image, 2, $x-15, 0, $str, $noir);
    		imagefttext($image, 12, 0, $x-15, 0, $noir, $font, $str);
     
        } else {
            ImageLine($image, $x, 20, $x, 25, $grisClair);
        }
    }
    // imagestring($image, 2, 0, 20, $title, $noir);
    imagefttext($image, 12, 0, 20, 0, $noir, $font, $title);
     
    imagefilledrectangle($image, $offsetGauche, 26, $taille + $offsetGauche, 35, $bleuclair);
     
    if ($prog !== '') {
        $progs = explode(",", $prog);
        $n = count($progs);
        if (($n % 3) == 0) {
            for ($i=0; $i<$n; $i+=3) {
                $mode = $progs[$i];
                $start = $progs[$i+1];
                $end = $progs[$i+2];
                $nombres = explode(":", $start);
                $debut = $nombres[0] * 60 + $nombres[1];
                $debut = $offsetGauche + $taille * $debut / 1440;
                $nombres = explode(":", $end);
                $fin = $nombres[0] * 60 + $nombres[1];
                $fin = $offsetGauche + $taille * $fin / 1440;
                if ($mode === 'n') {
                    imagefilledrectangle($image, $debut, 26, $fin, 35, $orange);
                } else {
                    imagefilledrectangle($image, $debut, 26, $fin, 35, $rouge);
                }
            }
        }
    }
    imagepng($image);

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Prototype :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    imagettftext(
        GdImage $image,
        float $size,
        float $angle,
        int $x,
        int $y,
        int $color,
        string $font_filename,
        string $text,
        array $options = []
    ): array|false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagefttext($image, 12, 0, 20, $y = 0, $noir, $font, $title);
    => Tu poses ton texte en dehors de l'image, augmente la valeur de $y

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Tu poses ton texte en dehors de l'image, augmente la valeur de $y
    Merci Séb.

    La valeur de $y n'étant pas défini avec "imagestring", je l'avais sans réfléchir passée à 0.
    Pas sûr que j'aurais fini par trouver !

    J'ai essayé plusieurs polices, le rendu n'est pas aussi précis que ce que j'aurais imaginé.
    Lors de ma recherche sur le sujet, je suis tombé sur une méthode qui semble être de l'anti-Aliasing / anticrénelage, c'est ici :

    https://stackoverflow.com/questions/...xt-transparent

    Pensez-vous que cela puisse améliorer l'affichage de la police dans mon cas ?

    Bien cordialement

  7. #7
    Membre éprouvé Avatar de ane-mais
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 37
    Par défaut
    La question initiale étant

    Citation Envoyé par NeriXs Voir le message
    J'aimerais améliorer le rendu du texte de mes images.
    je ne vois pas en quoi elle est résolue vu le contenu du nouveau post https://www.developpez.net/forums/d2.../#post11827633 (inutile à mon avis).

    J'ai autre chose à faire que de courrir après les post pour le même sujet.

    Bonne continuation.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour ane-mais,

    Je pensais bien faire en séparent!
    Le code du début utilisait " imagestring" et donc une police non personnalisable!
    J'ai eu quelque difficulté avec "imagettftext" que je plaçais hors image et que @Séb. a mis en évidence.

    J'avais l'impression que ma demande s'écartait de la demande d'origine.
    Désolé je ne voulais pas vous faire perdre votre temps!

    Bonne continuation également.

  9. #9
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Je pense que c'est lié a la résolution du l'écran ça fonctionne correctement chez moi

    vous pouvez lire cet article comment calculer le paramètre fontsize ..

    https://blog.karthisoftek.com/a?ID=0...c-1df88da93dec


    Nom : S.png
Affichages : 96
Taille : 16,5 Ko

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Sur la page du lien que vous avez donné, on peut lire :

    (2) $size , le document officiel explique que la taille de la police et son unité de longueur dépendent de la version de la bibliothèque GD, qui est en pixels pour GD1 et en points pour GD2.

    Cher moi c'est bien GD2 .
    Vous ne seriez pas en GD1 ?


    Citation Envoyé par wheel Voir le message
    vous pouvez lire cet article comment calculer le paramètre fontsize ..

    https://blog.karthisoftek.com/a?ID=0...c-1df88da93dec
    Mon écran, Dell Ultra HD 4k P2715Q, 27", Résolution : 3 840×2 160, 163 DPI.

    Je n'ai pas compris comment calculer le paramètre font size ..

  11. #11
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Désolé cette piste est moins prometteuse votre texte ne semble pas presenté une erreur dans ce coté le calcule a air correcte... j'ai l'impression que votre navigateur fait un petit stretch a l'image pour répondre à la restriction imposé par le style "classProg" que vous avez défini alos on peut voir le texte flou et épais donc essaie sans ce style .. ou ajuster le code de image.php pour produire une image deux fois plus grande que la taille imposé par ce style

  12. #12
    Membre éprouvé Avatar de ane-mais
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2022
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2022
    Messages : 37
    Par défaut
    Citation Envoyé par NeriXs Voir le message
    Mon écran, Dell Ultra HD 4k P2715Q, 27", Résolution : 3 840×2 160, 163 DPI.
    La résolution de l'écran n'a rien à voir avec le rendu différent entre l'image php et l'image avec un logiciel de dessin.
    Est-ce que le logiciel de dessin utilise les mêmes paramêtres ?
    Le fichier final a t il la même taille par ces 2 procédés ?
    Il y a y t il une compression ?
    Au lieu de le sortir sur écran, par php vous pouvez le sortir sur fichier puis le visionner au lieu de faire une capture.
    Avez-vous testé avec d'autres navigateurs ?

Discussions similaires

  1. [XL-2016] Constituer une ligne de texte avec plusieurs polices de caractères
    Par PaulG2B dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/05/2020, 21h13
  2. Réponses: 4
    Dernier message: 02/02/2017, 19h50
  3. Afficher du texte avec une police personnalisée.
    Par Rakken dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 21/12/2008, 20h06
  4. Réponses: 4
    Dernier message: 25/04/2005, 19h36
  5. [MFC] label avec une police qui s'ajuste
    Par romeo9423 dans le forum MFC
    Réponses: 7
    Dernier message: 15/03/2005, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo