[help]Librairie GD

Discussion dans 'Web, design' créé par Ezekiel !, 2 Septembre 2005.

Statut de la discussion:
Fermée.
  1. Offline
    Ezekiel ! Elite
    Bonjour!
    J'ai fait un petit script cet apres midi qui liste les images d'un dossier, les mignaturises, et... incruste un logo dessus.
    Le problème c'est que l'incrustation du logo est foireuse.
    Il est à la bonne position etc... mais il n'est pas transparent :?
    (il est rouge sur fond blanc en png)
    J'utilise la fonction imagecopymerge pour l'incustation.
    Si quelqu'un a une idée...
    Merci d'avance
    Ezekiel !, 2 Septembre 2005
    #1
  2. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Code:
    $s_src = imagecreatefrompng ($src);
    imagealphablending($s_src,true);
    
    Jereck, 2 Septembre 2005
    #2
  3. Offline
    noLain www.wearewise.be
    J'avais deja fais ca:

    Code:
    <?php
    if(isset($_GET['img'])){
      header ("Content-type: image/jpeg");
      header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
      header("Cache-Control: no-store, no-cache, must-revalidate");
      header("Cache-Control: post-check=0, pre-check=0", false);
      header("Pragma: no-cache");
    
      $fichier_source = $_GET['img'];
      $fichier_copyright = "./copy.gif";
    
      $getExt = explode(".", $fichier_source);
      $ext = $getExt[count($getExt) - 1];
    
      if($ext=="jpg"){
       $im_source = ImageCreateFromJpeg ($fichier_source);
      }else if($ext=="gif"){
       $im_source = ImageCreateFromGif ($fichier_source);
      }else if($ext=="png"){
       $im_source = ImageCreateFromPng ($fichier_source);
      }else{
       $im_source = ImageCreateFromGif ($fichier_copyright);
      }
    
    
      $im_copyright = ImageCreateFromGif ($fichier_copyright);
      $larg_copyright = imagesx ($im_copyright);
      $haut_copyright = imagesy ($im_copyright);
    
      @imageCopyMerge ($im_source, $im_copyright,0, 0, 0, 0, $larg_copyright,$haut_copyright, 70);
    
      Imagejpeg ($im_source);
    }else{
      header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
      header("Cache-Control: no-store, no-cache, must-revalidate");
      header("Cache-Control: post-check=0, pre-check=0", false);
      header("Pragma: no-cache");
    
      if(isset($_POST['image'])){
       $image=$_POST['image'];
      }else{
       $image="http://www.google.fr/intl/fr_fr/images/logo.gif";
      }
    ?>
    <html>
    <body>
    <form method=post action=?>
    Url de l'image: <input type=text name=image value='<?=$image;?>'> <input type=submit name=submit value='tagger !'>
    </form>
    </body>
    </html>
    <?
     if(isset($_POST['image'])){
      echo "<br><br><img border=0 src='index.php?img=".$_POST['image']."'>";
     }
    }
    ?>
    avec cette image: (gif avec fond transparent)
    [IMG]

    a tester ici : http://www.noprobz.be/img/
    noLain, 2 Septembre 2005
    #3
  4. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    La transparence du GIF est différente de celle du PNG ;)
    Jereck, 2 Septembre 2005
    #4
  5. Offline
    noLain www.wearewise.be
    oui, autant utiliser un gif en fait :p
    noLain, 2 Septembre 2005
    #5
  6. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    heuuu ... rien à voir, perso, je préfère utiliser l'Alpha-Channel du PNG pour avoir un watermark qui se fond bien dans l'image de base, plutot que d'avoir un GIF pixelisé.
    Jereck, 2 Septembre 2005
    #6
  7. Offline
    Ezekiel ! Elite
    j'arrive pas en png mais ça marche en gif apprament.
    Seul problème :
    comment rendre le fond dune img gif transparente plz ?
    Ezekiel !, 2 Septembre 2005
    #7
  8. Offline
    Tifox ou pas
    Je profite du topic pour demander si quelqu'un a réussi a le faire avec un png contenant un couche alpha ?
    Parce qu'avec un gif, pas de problème, mais j'ai jamais russi a utiliser la transparence des png.


    Ez3kieL > Ton gif avec transparence, tu veux le créer avec GD ou bien c'est celui qui est appliqué sur les photos et tu peux le créer une fois pour toute avec un programme de dessin ?
    Tifox, 2 Septembre 2005
    #8
  9. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    Tifox, regarde mon 1er reply
    Jereck, 2 Septembre 2005
    #9
  10. Offline
    Tifox ou pas
    Non didju, j'ai passé sur ton post car j'avais lu createimagefromjpg()...

    J'essaye demain, car je ne suis visiblement plus cabable de lire conveablement aujourd'hui, alors programmer...
    Tifox, 2 Septembre 2005
    #10
  11. Offline
    Ezekiel ! Elite
    mon gif c avec un logiciel style paint que je veux le créer...
    Ezekiel !, 2 Septembre 2005
    #11
  12. Offline
    Tifox ou pas
    Paint, c'est pas gagné, mais avec photoshop, paintshoppro,... il n'y a pas de problème.

    Je peux t'expliquer pour photoshop, mais pas pour les autres (je connais pas exactement la marche a suivre).
    Tifox, 2 Septembre 2005
    #12
  13. Offline
    Tifox ou pas
    Bon, pour mon petit logo en png, je n'y arrive pas.

    Voila mon code de test, j'ai pas mal googlelisé encore, mais j'ai rien trouvé de vraiment précis sur la transparence des png.

    Code:
    <?php
    header ("Content-type: image/png");
    
    // Crée l'image
    $image =  imagecreatetruecolor (200, 100);
    
    // Copie le jpg de fond
    $jpg = imagecreatefromjpeg("fond.jpg");
    imagecopymerge($image, $jpg,0, 0, 0, 0, 200,100, 100);
    
    // Recupère le png de logo et copie
    $s_src = imagecreatefrompng ("img.png"); 
    imagealphablending($s_src,true); 
    imagecopymerge($image, $s_src,0, 0, 0, 0, 200,100, 100);
    
    
    ImagePng ($image);
    
    // Code pour afficher juste le logo
    /*imagealphablending($s_src,false); 
    imagesavealpha($s_src, true);
    ImagePng ($s_src);*/
    ?>
    Alors, est-ce que j'aurai mieux fais d'aller dormir et j'ai une erreur grosse comme une maison ?

    Note que mon png comporte bien une couche de tranparence, car quand je lui demande juste d'afficher le png sous firfox, ça marche.
    Tifox, 2 Septembre 2005
    #13
  14. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    OK, il me semble que j'ai fait une gaffe :p

    Code:
    <?php 
    header ("Content-type: image/png"); 
    
    // Crée l'image 
    $image =  imagecreatetruecolor (200, 100); 
    
    // Copie le jpg de fond 
    $jpg = imagecreatefromjpeg("fond.jpg"); 
    imagecopymerge($image, $jpg,0, 0, 0, 0, 200,100, 100); 
    imagealphablending($image,true); 
                // C'est l'image de fond qui doit supporter l'Alpha
    
    // Recupère le png de logo et copie 
    $s_src = imagecreatefrompng ("img.png"); 
    imagecopy($image, $s_src,0, 0, 0, 0, 200,100, 100); 
                // Je ne sais plus c'est quoi la différence entre ImageCopy et
                // ImageCopyMerge, dans mon script, c'est ImageCopy
    
    ImagePng ($image); 
    ?>
    Jereck, 2 Septembre 2005
    #14
  15. Offline
    Tifox ou pas
    Voila, ça marche.

    En fait, c'est tout con, mais très mal documenté : la doc est mal foutue, car il dise explicitement que pour copier en tenant coumpte de la couche alpha, il faut utiliser imageCopyMerge() et pas imageCopy()...
    Il n'y a pas besoin de image alphablending()

    Merci Jereck

    La version qui fonctionne (il y a une petite erreur de paramètre dans le code de jereck)

    Code:
    header ("Content-type: image/png"); 
    
    // Crée l'image 
    $image =  imagecreatetruecolor (200, 100); 
    
    // Copie le jpg de fond 
    $jpg = imagecreatefromjpeg("fond.jpg"); 
    imagecopymerge($image, $jpg,0, 0, 0, 0, 200,100, 100); 
    
    // Copie le png de logo
    $s_src = imagecreatefrompng ("img.png"); 
    imagecopy ( $image, $s_src , 0 , 0 , 0 , 0 , 200 , 100 );
    
    // Affiche
    ImagePng ($image); 
    Tifox, 3 Septembre 2005
    #15
  16. Offline
    Jereck Procrastinateur
    Equipe GamerZ.be
    quand je ne l'utilisait pas, j'avais des grosses taches pas belles à la place de mon watermark.
    Jereck, 3 Septembre 2005
    #16
  17. Offline
    deleter_moi ex membre
    deleter_moi, 3 Septembre 2005
    #17
  18. Offline
    Ezekiel ! Elite
    merci mais c'était réglé j'ai demandé a une personne :p
    Ezekiel !, 3 Septembre 2005
    #18
Statut de la discussion:
Fermée.