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 Perl Discussion :

générer une image via perl


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut générer une image via perl
    Bonjour à tous,

    j'aimerais générer une image (cf. pièce jointe) via perl.

    à partir de mes données, je suis capable de générer un fichier de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                  +----+----+----+----+----+
                  | S1 | S2 | S3 | S4 | S5 |
     +------------+----+----+----+----+----+
     |TEAD2       |   1|   1|   1|   1|   1|
     +------------+----+----+----+----+----+
    *|PSMD7       |   1|   0|   0|   1|   0|
     +------------+----+----+----+----+----+
    *|PRKAB2      |   0|   1|   0|   0|   1|
     +------------+----+----+----+----+----+
    *|SV2C        |   0|   1|   0|   1|   1|
     +------------+----+----+----+----+----+
    *|EIF5A       |   1|   0|   0|   1|   1|
     +------------+----+----+----+----+----+
    Maintenant, je cherche un moyen pour générer l'image : les cases contenant un 1 doivent être rouge, et les cases contenant un 0 doivent être verte.

    Le problème, c'est que je n'ai jamais générer d'image en Perl.
    J'aimerais avoir quelques conseils sur la manière de s'y prendre :
    vaut-il mieux que je me mettes à apprendre le Perl/Tk, le CGI?
    Existe-il d'autres solutions pour générer des images?
    Vaut-il mieux générer les données avec des 0 et des 1 en Perl puis passer à une autre techno pour générer l'image?

    Je ne sais pas dans quelles direction chercher, donc la moindre piste me serait utile

    Petit détail important : je dois générer cette image pour le boulot, et mon contrat se termine dans 3 semaines. Je ne peux donc pas me permettre d'utiliser une méthode trop longue à apprendre...
    Images attachées Images attachées  

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Utilise le module GD pour générer des images à la volée en Perl.

  3. #3
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    merci beaucoup pour cette réponse si rapide.

    je vais étudié ce module de plus près

    je mettrai ici le code de mon script (quand il sera écrit ), ça pourra toujours servir

  4. #4
    Membre habitué
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 379
    Points : 129
    Points
    129
    Par défaut
    chose promise, chose due : voila la partie de mon script permettant de générer l'image :

    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
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    #!/usr/bin/perl -w
     
    use strict;
    use GD;
     
    [...]
     
    ## Generation d'une image
    # create a new image
    my $img = new GD::Image(550,2400);
     
    # allocate some colors
    my $white = $img->colorAllocate(255,255,255);
    my $black = $img->colorAllocate(0,0,0);       
    my $red   = $img->colorAllocate(255,0,0);      
    my $green = $img->colorAllocate(0,255,0);
     
     
    # Ecriture de la legende en haut de l'image :
    $img -> string(gdMediumBoldFont, 2,10, "Liste des situations : ",$black);
    $img -> string(gdSmallFont, 10,20, "S1 : SAGE_Embryonic_stem_cell_H1_normal_p31_CL_SHE17",$black);
    $img -> string(gdSmallFont, 10,30, "S2 : SAGE_Embryonic_stem_cell_H1_normal_p54_CL_SHE16",$black);
    $img -> string(gdSmallFont, 10,40, "S3 : SAGE_Embryonic_stem_cell_H9_normal_p38_CL_SHES2",$black);
    $img -> string(gdSmallFont, 10,50, "S4 : SAGE_Embryonic_stem_cell_HES3_normal_p16_CL_SHE10",$black);
    $img -> string(gdSmallFont, 10,60, "S5 : SAGE_Embryonic_stem_cell_HES4_normal_p36_CL_SHE11",$black);
    $img -> string(gdSmallFont, 10,75, "Les lignes commencant par une etoile correspondent aux genes cibles de TEAD2",$black);
     
    # Ecriture de la ligne de titre du tableau gene_cibles
    $img -> string(gdGiantFont, 5, 100, "Genes cibles de TEAD2", $black);
    $img -> string(gdMediumBoldFont, 100, 130, " S1", $black);
    $img -> string(gdMediumBoldFont, 120, 130, " S2", $black);
    $img -> string(gdMediumBoldFont, 140, 130, " S3", $black);
    $img -> string(gdMediumBoldFont, 160, 130, " S4", $black);
    $img -> string(gdMediumBoldFont, 180, 130, " S5", $black);
     
     
    # Ecriture de la ligne de titre du tableau gene_non_cibles
    $img -> string(gdGiantFont, 250, 100, "Autres genes des concepts", $black);
     
    $img -> string(gdMediumBoldFont, 350, 130, " S1", $black);
    $img -> string(gdMediumBoldFont, 370, 130, " S2", $black);
    $img -> string(gdMediumBoldFont, 390, 130, " S3", $black);
    $img -> string(gdMediumBoldFont, 410, 130, " S4", $black);
    $img -> string(gdMediumBoldFont, 430, 130, " S5", $black);
     
    my ($y1,$y2) = (145,165);
    my ($x1, $x2);
     
     
    foreach my $tag (keys(%infos_cible))
    {
    	my $S1 = $infos_cible{$tag}->{'SAGE_Embryonic_stem_cell_H1_normal_p31_CL_SHE17'};
    	my $S2 = $infos_cible{$tag}->{'SAGE_Embryonic_stem_cell_H1_normal_p54_CL_SHE16'};
    	my $S3 = $infos_cible{$tag}->{'SAGE_Embryonic_stem_cell_H9_normal_p38_CL_SHES2'};
    	my $S4 = $infos_cible{$tag}->{'SAGE_Embryonic_stem_cell_HES3_normal_p16_CL_SHE10'};
    	my $S5 = $infos_cible{$tag}->{'SAGE_Embryonic_stem_cell_HES4_normal_p36_CL_SHE11'};
     
    	($x1, $x2) = (100, 120);
     
    	&draw_line($tag, $S1, $S2, $S3, $S4, $S5, 'left');
     
    	($y1,$y2) = ($y1+20, $y2+20);
    }
     
     
     
    ($y1,$y2) = (145,165);
     
     
    foreach my $tag (keys(%infos_non_cible))
    {
    	my $S1 = $infos_non_cible{$tag}->{'SAGE_Embryonic_stem_cell_H1_normal_p31_CL_SHE17'};
    	my $S2 = $infos_non_cible{$tag}->{'SAGE_Embryonic_stem_cell_H1_normal_p54_CL_SHE16'};
    	my $S3 = $infos_non_cible{$tag}->{'SAGE_Embryonic_stem_cell_H9_normal_p38_CL_SHES2'};
    	my $S4 = $infos_non_cible{$tag}->{'SAGE_Embryonic_stem_cell_HES3_normal_p16_CL_SHE10'};
    	my $S5 = $infos_non_cible{$tag}->{'SAGE_Embryonic_stem_cell_HES4_normal_p36_CL_SHE11'};
     
    	($x1, $x2) = (350, 370);
     
    	&draw_line($tag, $S1, $S2, $S3, $S4, $S5, 'right');
     
    	($y1,$y2) = ($y1+20, $y2+20);
     
    }
     
     
    # make sure we are writing to a binary stream
    binmode STDOUT;
     
    # Convert the image to PNG and print it on standard output
    print $img->png;
     
     
     
     
     
     
    sub draw_line
    {
    	my ($tag, $S1, $S2, $S3, $S4, $S5, $col) = @_;
     
    	if($col eq 'left')
    	{
    		$img -> string(gdSmallFont, 5, $y1, "* $tag", $black);
    	}
    	else
    	{
    		$img -> string(gdSmallFont, 250, $y1, "  $tag", $black);
    	}
     
    	if($S1 == 1)
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$red);
    	}
    	else
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$green);
    	}
     
    	($x1, $x2) = ($x1 + 20, $x2 + 20);
    	if($S2 == 1)
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$red);
    	}
    	else
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2, $green);
    	}
     
    	($x1, $x2) = ($x1 + 20, $x2 + 20);
    	if($S3 == 1)
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$red);
    	}
    	else
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$green);
    	}
     
    	($x1, $x2) = ($x1 + 20, $x2 + 20);
    	if($S4 == 1)
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$red);
    	}
    	else
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$green);
    	}
     
    	($x1, $x2) = ($x1 + 20, $x2 + 20);
    	if($S5 == 1)
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$red);
    	}
    	else
    	{
    		$img -> filledRectangle($x1,$y1,$x2,$y2,$green);
    	}
    }

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2007, 10h59
  2. Réponses: 3
    Dernier message: 02/12/2005, 13h23
  3. Comment générer une image dynamiquement ?
    Par K20 dans le forum Langage
    Réponses: 12
    Dernier message: 19/11/2005, 01h27
  4. [ImageMagick] Générer une image à partir de plusieurs images ?
    Par fichtre! dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 16/02/2005, 15h32
  5. [ImageMagick] Comment générer une image d'un code à entrer ?
    Par MiJack dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 16/01/2005, 21h29

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