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

Bibliothèques et frameworks PHP Discussion :

[GD] Est il possible écrire avec PHP sur une image JPG ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut [GD] Est il possible écrire avec PHP sur une image JPG ?
    Bonjour,

    J'ai vu différents scripts permettant de créer des images avec PHP.

    J'aimerai savoir si cela est possible :

    J'ai une bannière JPG, et j'aimerai la personnalisé dynamiquement avec du texte.

    J'aimerai savoir s'il est possible écrire avec PHP sur une image JPG ?

    Merci d'avance

    Arnaud

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    j'ai trouvé quelque chose :

    Code : 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
    <?php 
     
    $nom_image = "images/header_peugeot.jpg";  // le nom de votre image avec l'extension jpeg
    $texte = "votre texte";  // Le texte que vous désirez écrire sur l'image
     
    header ("Content-type: image/jpeg");
    $image = imagecreatefromjpeg($nom_image);
    $blanc = imagecolorallocate($image, 255, 255, 255);
    imagestring($image, 5, 150, 150,$texte, $blanc);
    imagejpeg($image);
    ?> 
     
    <!-- 
    C'est ici qu'on incorpore l'image. Donc ouvrez une page et placez la balise ci dessous
    C'est donc la balise HTML classique IMG 
    -->
     
    <img src="create_image.php">
    Reste à géré la qualité de l'image

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    En pièce jointe l'image que je créer avec PHP.

    Comme vous pouvez le voir, j'ai déjà du texte écrit.

    j'ai la chaine "Welcome to..." et "Autoliv Network..." qui sont intégré à l'image et la chaine "votre texte qui est ajouter par PHP"

    J'aimerai que la chaine "votre texte" ai le même aspect visuel que les deux autre chaine.

    Comment faire ceci ?
    Images attachées Images attachées  

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    donc j'ai réussie à charger une autre police, mais la qualité de la police est très médiocre.

    j'ai utilisé ce convertisseur de police gdf "wftopf.exe". Il y en a peut être d'autre qui sont mieux ?

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour Arnaud,

    Il suffit de choisir la meme police et la meme taille de police que tu as utilisé pour écrire le reste. Tu peux utiliser la fonction
    imagettftext qui te permettra de choisir la police d'écriture au format trueType.

    Par contre, si ce texte est, à termes, destiné à être statique, je veux dire par là qu'il restera inchangé, pourquoi ne pas écrire ce texte avec un logiciel comme Photoshop.

    D'autres parts, pour le référencement, je te conseillerai meme de positionner ce texte avec CSS, sur ta bannière, afin qu'il soit lisible par les moteurs de recherche.

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Salut, merci de ta réponse. Mes recherches mon porté justement sur la fonction imagettftext.

    La bannière est destiné à un logiciel web pour mon entreprise et non internet, donc pas de soucie de référencement.

    Je souhaite mettre le texte en dynamique car mon directeur change souvent d'avis sur ce qu'on doit écrire sur la bannière. Et toute les semaine rééditer la bannière avec photoshop, ça devient ennuyeux à force.

    Voici le script que j'ai écris :

    Code : 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
    <?php
    $nom_image = "images/header/header_APSFORUM/header_peugeot.jpg";  // le nom de l'image avec l'extension jpeg
    $texte = "Welcome to APS Forum";  // Le texte a écrire sur l'image
    header("Content-type: image/jpeg");
     
    // on créé l'image à partir de l'image source
    $image = imagecreatefromjpeg($nom_image);
     
    // on créé la couleur et on l'attribue à une variable
    $textcolor = imagecolorallocate($image, 255, 255, 255);
     
    putenv('GDFONTPATH=' . realpath('.')); //ligne obligatoire !
    imagettftext($image, 14, 45, 10, 190, $textcolor, 'arial', $texte);
     
    //renvoie une image sous format jpeg
    imagejpeg($image,'',100); 
     
    ?>
     
    <img src="create_image.php">
    Cependant, des que j'utilise la fonction imagettftext, mon image ne s'affiche plus. J'ai ceci qui est écris sur firefox : "http://localhost/apsforum_install/create_image.php"

    J'ai vérifier la config PHP et j'ai bien la GD qui est compilé avec le support de FreeType 2.x.

    aurais tu une idée de mon erreur ?

    Merci d'avance

  7. #7
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Le paramètre de police de caractère n'est pas le nom de cette police, mais le chemin vers le fichier ttf de celle-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagettftext($image, 14, 45, 10, 190, $textcolor, 'arial', $texte);
    Y-a-t-il un fichier arial.ttf à l'endroit spécifié ?

    Le chemin vers la police TrueType que vous souhaitez utiliser.

    Dépendant de la version de la bibliothèque GD utilisée par PHP, lorsque fontfile ne commence pas par un caractère / alors .ttf sera ajouté au nom du fichier et la bibliothèque recherchera ce nom de fichier dans les dossiers de police, définis par la bibliothèque.

    Lorsque vous utilisez une version de la bibliothèque GD inférieure à 2.0.18, un caractère espace, plutôt qu'un point-virgule, est utilisé pour définir des chemins alternatifs pour les fichiers de police. Si vous utilisez involontairement cette fonctionnalité, vous aurez ce message d'erreur : Warning: Could not find/open font. Pour ces versions affectées, la seule solution est de déplacée la police à un endroit qui ne contient pas d'espaces dans les noms de dossier.

    Dans le cas fréquent où une police réside dans le même dossier que le script l'utilisant, l'astuce suivante vous épargnera tous les problèmes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        <?php
        // 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 = 'SomeFont';
        ?>

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    oui la police était bien ds le meem répertoire. Il fallait juste mettre "arial.ttf" et non "arial".

    merci pour ton aide.

    en effet, la qualité d'écriture est plus jolie !

    il est possible avec la fonction "imagettftext" de faire un centrage à droite ? au lieu de gauche par défaut...

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    J'ai trouvé la solution pour centré a droite :

    Code : 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
    <?php
    $nom_image = "images/header/header_APSFORUM/header_peugeot.jpg";  // le nom de votre image avec l'extension jpeg
    $texte = "Welcome to APS Forum";  // Le texte que vous désirez écrire sur l'image
    $size = 20; //taille police
    header("Content-type: image/jpeg");
     
    // on créé l'image à partir de l'image source
    $image = imagecreatefromjpeg($nom_image);
     
    // on créé la couleur et on l'attribue à une variable pour ne pas la perdre
    $textcolor = imagecolorallocate($image, 255, 255, 255);
     
    putenv('GDFONTPATH=' . realpath('.')); //ligne obligatoire !
    $bbox = imagettfbbox ($size, 0, 'arialbd.ttf', $texte);
     
    $longueur_texte = $bbox[2] - $bbox[0];
    $z = 412 - $longueur_texte;
    $origine = $z+160;
     
    imagettftext($image, $size, 0, $origine, 50, $textcolor, 'arialbd.ttf', $texte);
     
    //renvoie une image sous format jpeg
    imagejpeg($image,'',100); 
    ?>

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Ce topic m'a été très utile merci !

    Cependant j'ai encore besoin de finition :

    1. Pensez-vous qu'il est possible de modifier l'espacement entre les lettres de texte ? (Je voudrais plus le compresser...)

    2. Comment enregistrer l'image générée sur le serveur ?

    Merci d'avance,
    Gobi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR XI] Est-il possible de mettre en gras une image sur Crystal report ?
    Par juju05 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 25/11/2015, 14h21
  2. Réponses: 1
    Dernier message: 20/09/2013, 13h34
  3. Réponses: 13
    Dernier message: 27/05/2011, 00h27
  4. Réponses: 2
    Dernier message: 03/07/2008, 10h31
  5. [HTML]Peut-on écrire un texte sur une image ?
    Par flogreg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/02/2005, 17h24

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