Conserver la transparence png par imagecopyresampled

Conserver la transparence png par imagecopyresampled - PHP - Programmation

Marsh Posté le 03-08-2004 à 21:36:39    

Hello,
J'ai réalisé un petit bout de code en PHP pour diviser une image en cubes de 24.24 pixels (afin de les utiliser dans un editeur de .map).
Le problème est que, quand je passe par imagecopyresampled (pour couper le png en cubes), la transparence disparait.
 
Voila mon code initial:  

Code :
  1. <?php
  2. $theimage = "pic1.png";
  3. $im = imagecreatefrompng($theimage);
  4. $size = getimagesize($theimage);
  5. $nbhorz=$size[0]/24;
  6. $nbvert=$size[1]/24;
  7. $name=0;
  8. $number=0;
  9.   for($i=0;$i<$nbvert;$i++)
  10.     {
  11.        for($j=0;$j<$nbhorz;$j++)
  12.          {
  13.             $im2 =  imagecreate(24,24);
  14.             imagecopyresampled($im2,$im,0,0,$j*24,$i*24,24,24,24,24);
  15.             header("Content-type: image/png" );
  16.             $name="$number.png";$number++;
  17.             imagepng($im2,$name);
  18.          }
  19.     }
  20. ?>


 
Après quelques recherches, et analyse d'autres script, j'ai réalisé ce code (qui ne marche pas non-plus)
 

Code :
  1. <?php
  2. $theimage = "pic1.png";
  3. $im = imagecreatefrompng($theimage);
  4. $size = getimagesize($theimage);
  5. $nbhorz=$size[0]/24;
  6. $nbvert=$size[1]/24;
  7. $name=0;
  8. $number=0;
  9.   for($i=0;$i<$nbvert;$i++)
  10.     {
  11.        for($j=0;$j<$nbhorz;$j++)
  12.          {
  13.             $im2 =  imagecreate(24,24);
  14.             imagecolortransparent($im2,imagecolorallocate($im2,255,0,255));
  15.             imagefill($im2, 0, 0, imagecolorallocate($im2,255,0,255));
  16.             imagecopyresampled($im2,$im,0,0,$j*24,$i*24,24,24,24,24);
  17.             header("Content-type: image/png" );
  18.             $name="$number.png";$number++;
  19.             imagepng($im2,$name);
  20.          }
  21.     }
  22. ?>


 
Personne ne sait comment faire ici?
 
Merci beaucoup.
 
Bye
 
Fonzie


Message édité par FonzieV le 09-08-2004 à 16:17:49
Reply

Marsh Posté le 03-08-2004 à 21:36:39   

Reply

Marsh Posté le 08-08-2004 à 17:11:32    

Personne ne peut m'aider?
:-(
Merci.

Reply

Marsh Posté le 01-09-2004 à 23:28:47    

Bon, up up up (j'arrive pas a croire que personne ne peut m'aider; lol).
Merci (c ma derniere tentative ^^).

Reply

Marsh Posté le 01-09-2004 à 23:32:26    

il est 23h31... patience... demain est un autre jour...

Reply

Marsh Posté le 02-09-2004 à 00:09:09    

^^ il est 00h10...

Reply

Marsh Posté le 02-09-2004 à 00:12:01    

désolé, j'avais pas fait gaffe que ton 1er post était déjà ben vieux...
google n'a rien donné ?

Reply

Marsh Posté le 02-09-2004 à 12:09:31    

Utiliser imagecreatetruecolor() pour créer les petites images, et non imagecreate().
 

Code :
  1. <?php
  2. $theimage = "img.png";
  3. $im = imagecreatefrompng($theimage);
  4. $size = getimagesize($theimage);
  5. $w = $size[0];
  6. $h = $size[1];
  7. $im2 =  imagecreatetruecolor($w/2,$h/2);
  8. imagecopyresampled($im2,$im,0,0,0,0,$w/2,$h/2,$w,$h);
  9. imagecolortransparent($im2,imagecolorallocate($im2,255,255,255));
  10. header("Content-type: image/png" );
  11. imagepng($im2);
  12. ?>

Reply

Marsh Posté le 07-09-2004 à 22:09:51    

Yep,
Freekill, j'ai testé ton script mais malheuresement, il ne garde pas la transparence (même en ayant fait correspondre le numero de la couleur)...
Tu es sûr que ça marche bien?

Reply

Marsh Posté le 07-09-2004 à 23:36:09    

Certain, je l'ai testé… (les parties blanches sont bien transparentes)


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 08-09-2004 à 00:02:42    

Au lieu de par la librairie GD tu peux p-e essayer d'utilsier imageMagik ! maintenant je n'ai jamais essayé, c'est juste une idée au passage !


---------------
Mon Mod Packard Bell
Reply

Marsh Posté le 08-09-2004 à 00:02:42   

Reply

Marsh Posté le 08-09-2004 à 14:38:58    

"Au lieu de par la librairie GD tu peux p-e essayer d'utilsier imageMagik ! maintenant je n'ai jamais essayé,"
Bin, le pb c que j'ai pas acces au serveur ^^.
 
"Certain, je l'ai testé… (les parties blanches sont bien transparentes)"
Donc, petite question:
-Avec quel logiciel tu as enregistré ton png (j'utilise paintshoppro6)?
Peux-tu m'envoyer l'image avec laquelle tu as fait la démo?
 
Merci bcp.
Bye
Fonzie

Reply

Marsh Posté le 08-09-2004 à 14:45:06    

Reply

Marsh Posté le 08-09-2004 à 15:26:02    

Peut-être que tu as des problèmes parce que tu utilises des PNG-24 avec plus de 256 couleurs.
 
Essaie ceci :
 

Code :
  1. <?php
  2. // ouvre l'image d'origine
  3. $theimage = "freek.png";
  4. $im = imagecreatefrompng($theimage);
  5. // détermine sa taille
  6. $size = getimagesize($theimage);
  7. $w = $size[0];
  8. $h = $size[1];
  9. // crée l'image de sortie
  10. $im2 =  imagecreatetruecolor($w/2,$h/2);
  11. imagealphablending($im2,false);
  12. imagesavealpha($im2,true);
  13. // remplit l'image de sortie
  14. imagecopyresampled($im2,$im,0,0,0,0,$w/2,$h/2,$w,$h);
  15. // affiche l'image
  16. header("Content-type: image/x-png" );
  17. imagepng($im2);
  18. ?>


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 09-09-2004 à 23:29:07    

Merci pour ton aide.
Cependant, quand j'utilise ton code j'ai un message comme quoi la fonction imagesavealpha est introuvable.
On va faire plus simple (si c possible ^^)
Voila mon image: http://fvring.free.digitartstudio.com/input.png
Comme tu le vois, la couleur mauve (255,0,255) est transparente (et ya que 256 couleurs dans l'image.
Arrives-tu a la garder la transparence avec ton code?
Si oui, arrives tu a garder la transparence avec ce code? (c le dernier code fonctionnel que j'ai fait marcher):
<?php
$theimage = "input.png";  
$im = imagecreatefrompng($theimage);  
$size = getimagesize($theimage);  
$nbhorz=$size[0]/16;
$nbvert=$size[1]/16;
$name=0;
$number=0;
  for($i=0;$i<$nbvert;$i++)
    {
       for($j=0;$j<$nbhorz;$j++)
         {
            $im2 =  imagecreate(16,16);
            imagecolortransparent($im2,imagecolorallocate($im2,255,0,255));
            imagefill($im2, 0, 0, imagecolorallocate($im2,255,0,255));
 
            imagecopyresampled($im2,$im,0,0,$j*16,$i*16,16,16,16,16);
            header("Content-type: image/png" );
            $name="output/$number.png";$number++;
            imagepng($im2,$name);
         }
    }
?>
 
Car je suis sûr que ça peut venir de mon serveur et pas du code (c quand même pas sorcier d'utiliser des fonctions gd quand même lol).
 
Merci bcp
 
Bye
 
Fonzie
 

Reply

Marsh Posté le 10-09-2004 à 04:31:21    

La fonction imagesavealpha() existe dans php depuis la version 4.3.2
 
http://be2.php.net/manual/en/funct [...] ealpha.php
 
Fais un phpinfo() pour voir ce que tu as sur ton serveur.
 
Sinon, oui ça fonctionne avec ton image et le dernier code que je t'ai donné. (avec le tiens non)
 


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 19-09-2004 à 11:40:07    

Ok merci bcp. J'ai installé EasyPhp pour tester (j'ai pas trop le temps en ce moment mais je reviendrais s'il y a un autre pb, lol...).
 
Merci
 
++
 
Fonzie

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed