Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Insérer une image externe dans une image GD

17 views
Skip to first unread message

geno...@gmail.com

unread,
Mar 13, 2012, 12:16:43 PM3/13/12
to
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

unread,
Mar 13, 2012, 12:33:08 PM3/13/12
to
geno...@gmail.com, dans le message
<3415070.7672.1331655403273.JavaMail.geo-discussion-forums@vbtv42>, a
écrit :
> Je souhaite créer une image à l'aide du module GD.

Pourquoi spécifiquement GD ?

geno...@gmail.com

unread,
Mar 13, 2012, 2:53:31 PM3/13/12
to
Le mardi 13 mars 2012 17:33:08 UTC+1, Nicolas George a écrit :
> <3415070.7672.1331655403273.JavaMail.geo-discussion-forums@vbtv42>, a
> écrit :
> > 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

unread,
Mar 13, 2012, 5:01:10 PM3/13/12
to

À (at) Tue, 13 Mar 2012 09:16:43 -0700 (PDT),
geno...@gmail.com écrivait (wrote):

> 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.

> 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).

> 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/>

geno...@gmail.com

unread,
Mar 14, 2012, 6:55:45 AM3/14/12
to Paul.Gab...@mines-albi.fr
> 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...


> 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

unread,
Mar 18, 2012, 6:39:35 AM3/18/12
to
Le 14/03/2012 11:55, geno...@gmail.com a écrit :
>> 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

geno...@gmail.com

unread,
Mar 20, 2012, 10:13:21 AM3/20/12
to
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 !!

0 new messages