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] Création partie d'image transparente


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut [GD] Création partie d'image transparente
    bonjour à tous


    je suis en train de finaliser un script, mais la demande qu'on m'avait initialement demandée vient de se transformer...

    mon script fait:
    récupération d'une image avec des tailles x et y (jamais les mêmes)
    création d'une nouvelle image qui ne doit pax excéder soit 200 pixels en longueur soit 200 pixels en hauteur
    si l'image a l'une des tailles en x ou en y (ou les 2) inférieure à 200 pixels, alors je centre l'image et je comble l'espace "vide" (les côtés) par du gris et je rajoute un liseré noir autour de l'image finale

    ainsi dans la majorité des cas j'obtiens des images qui ont au moins une cote inférieure à 200 pixels et qui ont du gris tout autour

    ce gris était là pour représenter la couleur de fond... mais le fond vient de changer, maintenant il y a un filigrane grisé dedans...

    ma question:
    dois-je repartir de zéro pour mon script (car désormais il faut que je travaille sur une notion de transparence ou alors faire un merge des 2 images) ou bien puis-je le transformer facilement??? (en substituant le gris actuel par une transparence? en travaillant sur du png à la place du jpeg???)

    c'est un peu flou...

    si vous avez des lumières à m'apporter...
    merci beaucoup

    je vous laisse l'état de mon script:

    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
     
    $Image = $nomDestination.$extension;
    $originale = $repertoireDestination.$Image;
    $ratio = 200;
    $src=imagecreatefromjpeg($repertoireDestination.$Image);
    $size = getimagesize($repertoireDestination.$Image);
    if ($size[0] <= $ratio && $size[1] <= $ratio ) {
    	$x = $size[0];
    	$y = $size[1];
    }
    if ( $size[0] == $size[1] && $size[0] > $ratio && $size[1] > $ratio ) {
    	$x = $size[0];
    	$y = $size[1];
    }		
    if ($size[0] <= $ratio && $size[1] > $ratio ) {
    	$x = round( ($size[0] / $size[1] ) * $ratio);
    	$y = $ratio;
    }	
    if ( $size[0] >= $ratio && $size[1] > $ratio && $size[0] < $size[1] ) {
    	$x = round( ($size[0] / $size[1] ) * $ratio);
    	$y = $ratio;
    }	
    if ($size[1] <= $ratio && $size[0] > $ratio ) {
    	$x = $ratio;
    	$y = round( ($size[1] / $size[0] ) * $ratio);
    }
    if ( $size[1] >= $ratio && $size[0] > $ratio && $size[0] > $size[1] ) {
    	$x = $ratio;
    	$y = round( ($size[1] / $size[0] ) * $ratio);
    }	
    $im=imagecreatetruecolor($x, $y);
    imagecopyresampled($im, $src, 0, 0, 0, 0, $x, $y, $size[0], $size[1]);
    $originale = "originale_$Image";
    imagejpeg($im, $repertoireDestination.$originale);
     
    $im=imagecreatetruecolor(200, 200);
    $position_x = round( (200 - $x) / 2 ); // pour positionner en x image dans la zone
    $position_y = round( (200 - $y) / 2 ); // pour positionner en y image dans la zone
    $gris = imagecolorallocatealpha($im,204,204,204,0); //($im,255,204,51,0)
    imagefilledrectangle($im, 0, 0, 200, 200, $gris);
    imagecopyresampled($im, $src, $position_x, $position_y, 0, 0, $x, $y, $size[0], $size[1]);
    $noir = imagecolorallocatealpha($im,0,0,0,0);
    imagerectangle($im, 0, 0, 199, 199, $noir);
     
    $normale = "normale_$Image";
    imagejpeg($im, $repertoireDestination.$normale);

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    La transparence des png n'est pas prise en compte par IE<7.

  3. #3
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    IE7 gère la transparence des PNG ? Ca c'est plutot cool !!!!

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Et ouè, enfin ils font quelque chose d'interessant
    Tu peux sinon bidouiller avec du javascript pour faire en sorte que IE6 supporte la transparence mais comme je le précise, c'est de la bidouille.
    Voilà un lien où tu te rendras compte qu'il y a beaucoup de bidouilleur sur le Web

  5. #5
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Tu peux aussi tenter de faire des gifs. Tu vas potentiellement perdre un peu en qualité d'image, mais ca vaut le coup de tester.

    Png, je déconseille a cause d'ie6 qui est encore beaucoup installé.

    --
    Rakken

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    J'ai une barrière psychologique avec le GIF.... Par contre, je suis amoureux du PNG

  7. #7
    Membre averti Avatar de mussara
    Inscrit en
    Novembre 2004
    Messages
    442
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2004
    Messages : 442
    Points : 348
    Points
    348
    Par défaut
    merci pour vos réponses...

    du coup j'ai un autre moyen si je ne veux pas utiliser la transparence... c'est de récupérer la partie de fond (là où il y a le logo en filigrane) et le plaquer autout de mon image à afficher...

    mais comment dois je faire?

    dois je créer d'abord une ressource avec cette image de fond
    puis faire un merge de cette image de fond + l'image ? qu'est ce que ça va donner pour la partie commune?

  8. #8
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    personnellement, j'ai une fonction de rendu de la transparence dans un script de redimensionnement des images en php.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    imagecolortransparent($dst, imagecolortransparent($src));
    imagecopyresampled($dst,$src,0,0,$w*$zoom,$h*$zoom, $w,$h);
    ça marche plus ou moins bien, la couleur de transparence est bien rendue.
    il existe une méthode plus complexe mais très précise dans le forum php.net de la fonction imagecolortransparent(), à voir. Elle se compose d'un script balayant chaque pixel vers chaque nouveau pixel en respectant les paramètres alpha. Pas évident, surtout que tout le commentaire est en anglais.

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

Discussions similaires

  1. [ImageMagick] Création image transparente
    Par alexmorel dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 05/10/2006, 15h26
  2. [ImageMagick] Création de vignettes (images réduites)
    Par tom06440 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 22/10/2005, 15h00
  3. rendre une image transparente
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 12/06/2005, 13h53
  4. rendre une image transparente
    Par matt92700 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 02/06/2005, 08h42
  5. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58

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