[help]Librairie GD

Statut
N'est pas ouverte pour d'autres réponses.

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
 

Jereck

Α & Ω
Staff
Code:
$s_src = imagecreatefrompng ($src);
imagealphablending($s_src,true);
 

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)


a tester ici : http://www.noprobz.be/img/
 

Jereck

Α & Ω
Staff
La transparence du GIF est différente de celle du PNG ;)
 

noLain

www.wearewise.be
Jereck a dit:
La transparence du GIF est différente de celle du PNG ;)
oui, autant utiliser un gif en fait ^^
 

Jereck

Α & Ω
Staff
nauhLain a dit:
Jereck a dit:
La transparence du GIF est différente de celle du PNG ;)
oui, autant utiliser un gif en fait ^^
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é.
 
1er
OP
Ezekiel !

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 ?
 

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 ?
 

Jereck

Α & Ω
Staff
Tifox, regarde mon 1er reply
 

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...
 
1er
OP
Ezekiel !

Ezekiel !

Elite
mon gif c avec un logiciel style paint que je veux le créer...
 

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

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.
 

Jereck

Α & Ω
Staff
OK, il me semble que j'ai fait une gaffe ^^

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); 
?>
 

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

Jereck

Α & Ω
Staff
Tifox a dit:
Il n'y a pas besoin de image alphablending()
quand je ne l'utilisait pas, j'avais des grosses taches pas belles à la place de mon watermark.
 
1er
OP
Ezekiel !

Ezekiel !

Elite
merci mais c'était réglé j'ai demandé a une personne ^^
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut