Discussion:
Insérer une image externe dans une image GD
(trop ancien pour répondre)
g***@gmail.com
2012-03-13 16:16:43 UTC
Permalink
Bonjour,

Je souhaite créer une image à l'aide du module GD.

Je souhaiterai écrire du texte dans l'image mais aussi insérer une image externe dans l'image, comment faire ? Avez-vous une parade ou une idée ?

Je souhaiterai aussi que la police de mon texte soit plus grande que celle proposée par le module GD, comment faire ?
Si je récupère un fichier ttf sur mon PC Windows pour le font, mon programme pourra t-il fonctionner si j'exécute le programme également sous Linux ou MAC avec ce même fichier ttf ?

Merci
Nicolas George
2012-03-13 16:33:08 UTC
Permalink
Post by g***@gmail.com
Je souhaite créer une image à l'aide du module GD.
Pourquoi spécifiquement GD ?
g***@gmail.com
2012-03-13 18:53:31 UTC
Permalink
Post by Nicolas George
Post by g***@gmail.com
Je souhaite créer une image à l'aide du module GD.
Pourquoi spécifiquement GD ?
Car c'est un module simple à installer en automatique sur différentes plate-formes. Je sais qu'avec Image::Magick, je pouvais faire ce que je voulais, mais pour cette fois-ci, ça ne m'arrange pas.

Je pense avoir trouvé ma solution en utilisant les constructeurs newFromPng ou newFromJpeg qui permettent de créer un objet GD à partir de fichiers externes. Ensuite, je peux travailler dessus ou les utiliser à ma convenance.
Il me reste mon interrogation sur les polices.
Paul Gaborit
2012-03-13 21:01:10 UTC
Permalink
À (at) Tue, 13 Mar 2012 09:16:43 -0700 (PDT),
Post by g***@gmail.com
Je souhaite créer une image à l'aide du module GD.
Je souhaiterai écrire du texte dans l'image mais aussi insérer une
image externe dans l'image, comment faire ? Avez-vous une parade ou
une idée ?
Pour insérer une image dans une autre, la méthode 'copy' (ou l'une de
ses variantes telles que copyResized, copyMerge, copyRotated...) est
parfaite.
Post by g***@gmail.com
Je souhaiterai aussi que la police de mon texte soit plus grande que
celle proposée par le module GD, comment faire ?
Choisir une autre police que la police par défaut (de préférence, une
police TrueType pour pouvoir choisir n'importe quelle taille).
Post by g***@gmail.com
Si je récupère un fichier ttf sur mon PC Windows pour le font, mon
programme pourra t-il fonctionner si j'exécute le programme également
sous Linux ou MAC avec ce même fichier ttf ?
Un fichier ttf (TrueType) est utilisable sur n'importe quel système (si
sa licence vous l'autorise).
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
g***@gmail.com
2012-03-14 10:55:45 UTC
Permalink
Post by Paul Gaborit
Pour insérer une image dans une autre, la méthode 'copy' (ou l'une de
ses variantes telles que copyResized, copyMerge, copyRotated...) est
parfaite.
Ok, mais il faut que l'image soit de type GD, donc je pense qu'il faille d'abord l'importer avec les méthodes newFromPng, newFromJpeg...
Post by Paul Gaborit
Choisir une autre police que la police par défaut (de préférence, une
police TrueType pour pouvoir choisir n'importe quelle taille).
Oui mais comment, la fonction load du module GD ne fonctionne pas (GD::Font->load) ça génère systématiquement un out of memory.

J'ai testé stringFT, mais perl arrête incessamment de fonctionner, je ne sais pas pourquoi.

Autre souci, les textes accentués ne passent pas. Vu que je récupère automatiquement les textes, qu'elle est l'encodage du texte dans le module GD afin que je puisse gérer cela facilement.

Merci d'avance
Jean-Louis Morel
2012-03-18 10:39:35 UTC
Permalink
Post by g***@gmail.com
Post by Paul Gaborit
Choisir une autre police que la police par défaut (de préférence, une
police TrueType pour pouvoir choisir n'importe quelle taille).
Oui mais comment, la fonction load du module GD ne fonctionne pas (GD::Font->load) ça génère systématiquement un out of memory.
J'ai testé stringFT, mais perl arrête incessamment de fonctionner, je ne sais pas pourquoi.
Autre souci, les textes accentués ne passent pas. Vu que je récupère automatiquement les textes, qu'elle est l'encodage du texte dans le module GD afin que je puisse gérer cela facilement.
D'après la doc, la bibliothèque gd utilise utf8 comme codage pour les
caractères.

Est-ce que le script suivant vous donne une image png avec le texte en
Arial 24pt en rouge avec les caractères accentués et une inclinaison de
30° ?

#!/usr/bin/perl
use strict;
use warnings;
use GD;
use GD::Text::Align;

GD::Text->font_path('C:/Windows/Fonts'); # Répertoire des fontes ttf
my $PI = 3.1415926;

my $gd = GD::Image->new(800,600);

my $white = $gd->colorAllocate(255,255,255);
my $red = $gd->colorAllocate(255,0,0);
my $black = $gd->colorAllocate(0,0,0);

my $align = GD::Text::Align->new($gd,
valign => 'top',
halign => 'left',
color => $red,
text => 'Caractères accentués é ç à è ù ê ü ï É Ç À È Ù Ê Ü Ï',
font => 'Arial',
ptsize => 24,
);

$align->draw(50, 500, $PI/6);

open my $IMG, '>', "img.png" or die $!;
binmode $IMG;
print $IMG $gd->png();
close $IMG;

__END__

HTH

--
J-L
http://www.bribes.org/perl
g***@gmail.com
2012-03-20 14:13:21 UTC
Permalink
Merci Jean-Louis,

Je me suis tourné sur l'utilisation du module GD::Text::Align, et surtout GD::Text::Wrap et c'est parfait.
Il faut que la doc du module GD soit remise à jour car sur ce point d'utilisation des fontes, ce n'est pas terrible.

Sympa !!

Loading...