voila j'ai un script d'upload puis miniaturisation pour png le problème est que l'image de base uploader nous pouvons correctement la visualiser par le lien du ftp mais pas les miniatures et lorsque je les récupères sur mon pc via le ftp, l'utilitaire d'aperçu windows m'affiche aucun aperçu possible
voici mon script

<?php
if(!in_array($extension, $extensions))
	{
		$erreur = '<font face="arial" size="3" color="red">Vous devez uploader un fichier de type gif, jpg, jpeg</font>';
	}
if(filesize($_FILES['avatar']['tmp_name'])>$taille_maxi)
	{
		$erreur = '<font face="arial" size="3" color="red">Le fichier est trop gros...</font>';
	}
if(!isset($erreur))
	{
		$NouvelleLargeur_mini = 250; //Largeur choisie à 100px mais modifiable
		$NouvelleLargeur_med = 600; //Largeur choisie à 600px mais modifiable
//Mini                                    
		$NouvelleHauteur_mini = $TailleImageChoisie[1] * $NouvelleLargeur_mini / $TailleImageChoisie[0];
		$NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur");
if($ext==='png')
		{
			$image_mini=imagecreatefrompng($_FILES['avatar']['tmp_name']);
		}
		imagecopyresampled($NouvelleImage_mini , $image_mini , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
//fin mini

//MED						 
		$NouvelleHauteur_med = $TailleImageChoisie[1] * $NouvelleLargeur_med / $TailleImageChoisie[0];
		$NouvelleImage_med = imagecreatetruecolor($NouvelleLargeur_med , $NouvelleHauteur_med ) or die ("Erreur");
if($ext==='png')
		{
			$image_med=imagecreatefrompng($_FILES['avatar']['tmp_name']);
		}
			imagecopyresampled($NouvelleImage_med , $image_med , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);
//fin med
			$NomImageExploitable = md5(uniqid());
if($ext==='png')
		{
			imagepng($NouvelleImage_mini , 'upload/redim/'.$NomImageExploitable.'-mini.png', 100);
			imagepng($NouvelleImage_med , 'upload/redim/'.$NomImageExploitable.'-med.png', 100);
		}
if($ext==='png' && move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $NomImageExploitable . $extension))
		{
			echo '</b><div id="succes" style="color:#00ff00; margin-left:5px; font-weight:bold;">Upload effectué avec succès !</div></b><br/>';
			echo 'Max : <textarea name="1" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(1);">http://www.iphone4gpro.monespace.net/upload/'.$NomImageExploitable.'.png</textarea><br/>';
			echo 'Med : <textarea name="3" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(3);">http://www.iphone4gpro.monespace.net/upload/redim/'.$NomImageExploitable.'-med.png</textarea></br>';
			echo 'Mini : <textarea name="2" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(2);">http://www.iphone4gpro.monespace.net/upload/redim/'.$NomImageExploitable.'-mini.png
		</textarea></br>';
			echo ''.$NomImageExploitable.'';
		}
else
		{
			echo 'Echec de l \'upload !';
		}
	}
else
{
     echo $erreur;
}?>
Bonjour,
Que veux-tu que nous fassions pour t'aider Smiley eek
Tu donnes un "bout de code" impossible a comprendre, avec par exemple des
if($ext==='png') ?? on est pas dans le cas d'un binaire ou le "===" permet d'accepter "0"
Mais pour le reste impossible de te dire ce qui ne vas pas.
En fait, désolée, mais il faut le PHP/HTML de saisie
(le FORM complet)
et la totalitée du PHP de traitement. Si non nous ne pouvons tester
et débuguer pour te dire ce qui ne vas pas.

As-tu controlé php.ini si le PNG est implémenté ?

ET POURQUOI REPOSTER ICI
http://forum.alsacreations.com/topic-1-48592-1-Probleme-visualisation-png-miniature.html
Modifié par Christele (08 May 2010 - 16:13)
Bonjour,

voila mon formulaire php

<form method="POST" action="upload.php" enctype="multipart/form-data">
     <input type="hidden" name="MAX_FILE_SIZE" value="4000000"/>
     Fichier : <input type="file" name="avatar">
     <input type="submit" name="Envoyer" value="Envoyer le fichier"/>
</form>


j'ai le php suivant,


<?php
$dossier = 'upload/';		//Dossier ou sont uploader les images grand format
$TailleImageChoisie = getimagesize($avatar);	//Récupération de la taille de l'image
$taille_maxi = 4000000; //Poids max 
$extensions = array('.gif', '.jpg', '.jpeg', '.bmp'); //extensions autorisée
$extension = strtolower(strrchr($_FILES['avatar']['name'], '.')); //récupération extension uploader
$ext = strrchr($_FILES['avatar']['name'], '.');
$ext = strtolower(substr($ext,1));
$imagecreatefromextension = 'imagecreatefrom'.$ext;
$img = 'image'.$ext;
$test = strrchr($_FILES['avatar']['name'], '.');
$test = substr($ext,1);

if(!in_array($extension, $extensions))
	{
		$erreur = '<font face="arial" size="3" color="red">Vous devez uploader un fichier de type gif, jpg, jpeg</font>';
	}
if(filesize($_FILES['avatar']['tmp_name'])>$taille_maxi)
	{
		$erreur = '<font face="arial" size="3" color="red">Le fichier est trop gros...</font>';
	}
if(!isset($erreur))
	{
		$NouvelleLargeur_mini = 250; //Largeur choisie à 100px mais modifiable
		$NouvelleLargeur_med = 600; //Largeur choisie à 600px mais modifiable
//Mini                                    
		$NouvelleHauteur_mini = $TailleImageChoisie[1] * $NouvelleLargeur_mini / $TailleImageChoisie[0];
		$NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur");
if($ext==='jpg')
		{
			$image_mini=imagecreatefromjpeg($_FILES['avatar']['tmp_name']);
		}
else
		{
			$image_mini=$imagecreatefromextension($_FILES['avatar']['tmp_name']);
		}
		imagecopyresampled($NouvelleImage_mini , $image_mini , 0,0, 0,0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
//fin mini

//MED						 
		$NouvelleHauteur_med = $TailleImageChoisie[1] * $NouvelleLargeur_med / $TailleImageChoisie[0];
		$NouvelleImage_med = imagecreatetruecolor($NouvelleLargeur_med , $NouvelleHauteur_med ) or die ("Erreur");
if($ext==='jpg')
		{
			$image_med=imagecreatefromjpeg($_FILES['avatar']['tmp_name']);
		}
else
		{
			$image_med=$imagecreatefromextension($_FILES['avatar']['tmp_name']);
		}

			imagecopyresampled($NouvelleImage_med , $image_med , 0,0, 0,0, $NouvelleLargeur_med, $NouvelleHauteur_med, $TailleImageChoisie[0],$TailleImageChoisie[1]);
//fin med
			$NomImageExploitable = md5(uniqid());
if($ext==='jpg')
		{
			imagejpeg($NouvelleImage_mini , 'upload/redim/'.$NomImageExploitable.'-mini.jpeg', 100);
			imagejpeg($NouvelleImage_med , 'upload/redim/'.$NomImageExploitable.'-med.jpeg', 100);
		}
else
		{
			$img($NouvelleImage_mini , 'upload/redim/'.$NomImageExploitable.'-mini'.$extension, 100);
			$img($NouvelleImage_med , 'upload/redim/'.$NomImageExploitable.'-med'.$extension, 100);
		}	
if($ext==='jpg' && move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $NomImageExploitable . $extension))
		{
			echo '</b><div id="succes" style="color:#00ff00; margin-left:5px; font-weight:bold;">Upload effectué avec succès !</div></b><br/>';
			echo 'Max : <textarea name="1" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(1);">http://www.monsite.net/upload/'.$NomImageExploitable.'.jpg</textarea><br/>';
			echo 'Med : <textarea name="3" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(3);">http://www.monsite.net/upload/redim/'.$NomImageExploitable.'-med.jpeg</textarea></br>';
			echo 'Mini : <textarea name="2" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(2);">http://www.monsite.net/upload/redim/'.$NomImageExploitable.'-mini.jpeg</textarea></br>';
		}
elseif(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $NomImageExploitable . $extension))
		{
			echo '<b><div id="succes" style="color:#00ff00; margin-left:5px; font-weight:bold;">Upload effectué avec succès !</div></b><br/>';
			echo 'Max : <textarea name="1" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(1);">http://www.monsite.net/upload/'.$NomImageExploitable.'.'.$ext.'</textarea></textarea><br/>';
			echo 'Med : <textarea name="3" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(3);">http://www.monsite.net/upload/redim/'.$NomImageExploitable.'-med.'.$ext.'</textarea></br>';
			echo 'Mini : <textarea name="2" class="readonly multilinebox" style="overflow:HIDDEN; width:350px;" rows="1" cols="520" readonly="readonly" wrap="off" onclick="select(2);">http://www.monsite.net.net/upload/redim/'.$NomImageExploitable.'-mini.'.$ext.'</textarea></br>';
		}
else
		{
			echo 'Echec de l \'upload !';
		}
	}
else
{
     echo $erreur;
}
?>



le problème étant le suivant.

Mon upload de toutes les extension se fait correctement ( jpg, jpeg, bmp, gif)
l'extension .png me pose problème je m'explique.
L'upload de l'image "grand format" ( format d'origine ) se fait sans problème on peut la visualiser grâce a la balise html <a href"..."/> le problème vient avec les miniatures png ...
la balise <ahref""/> me laisse visualiser une page blanche ( ou le lien de l'image miniature )
je ne voit pas pourquoi cela arrive alors que l'upload se fait correctement pour tout les autres fichier...
voila si quelqu'un peut m'aider
merci d'avance
Parfait, rien ne marche,
Quand récupéres tu les saisies ? ou bien le PHP n'est pas complet Smiley eek
Dans cette version compléte, rien n'est fait pour le png Smiley ohwell

Bon moi j'abandonnes, et personne ne diras que je ne suis pas patiente, il y a des limites non Smiley fache
la version la est complete et doit prendre en charge le png grace aux variable
$imagecreatefromextension qui recupere l'extension automatiquement d'un fichier pour executer imagecreatefrom gif imagecreatefromjpg etc... sans avoir tout a retapper a chaque coup

il y a plusieurs variable comme cela le script prend en charge jpg jpeg bmp gif
Comme tu dis jpg jpeg bmp gif
Mais pas png ou je suis aveugle !

D'autre par il ne faut pas écrire

$TailleImageChoisie = getimagesize($avatar);
MAIS
$TailleImageChoisie = getimagesize($_FILES['avatar']['tmp_name']);
sauf erreur de ma part car je suis nouveau dans le moinde du php ^^ $imagecreatefromextension comprend le gif le jpeg le jpg et le png car je l'ai configurer pour qu'elle soit

$imagecreatefromextension = 'imagecreatefrom'.$ext;

//fonctionimagecreate from + extension récupérer par .$ext


$ext = strrchr($_FILES['avatar']['name'], '.');
$ext = strtolower(substr($ext,1));
//recuperation de l'extension du fichier envoyer donc si envoi de fichier pngla variable $createimagefromextension = imagecreatefrompng
Attention, petite précision concernant ce que je t'avais donné par rapport à $imagecreatefromextension. Le but est de pouvoir appeler une fonction existante de manière variable. Or la fonction imagecreatefromjpg n'existe pas. Que ce soit pour une image .jpg ou .jpeg, c'est imagecreatefromjpeg qui doit être utilisée.
Modifié par phpdoesnotcare (08 May 2010 - 20:48)
phpdoesnotcare a écrit :
Attention, petite précision concernant ce que je t'avais donné par rapport à $imagecreatefromextension.

Smiley eek Alors il y avait un troisiéme sujet que je n'aurais pas lu Smiley murf
Vraiment il y a des "demandeurs" qui sont trés dur a aider même en faisant un trés gros effort.
phpdoesnotcare a écrit :
Yep, on en avait parlé ici.

Merci a toi, mais c'est NULL ... j'espéres que les Modérateurs éviteront un quatriéme sujet lancé sur l'upload alors qu'il y en a mille exemples qui mrchent Smiley decu
admettons vouloir utiliser juste l'extension .png je passe pour l'es autres je fait donc un script adapter au .png pour que cela soit plus simple.
toujours avec le même formulaire j'utilise le php suivant :

<?php
		$fichier = ($_FILES['avatar']['tmp_name']);
		$TailleImageChoisie = getimagesize($_FILES['avatar']['tmp_name']);	//Récupération de la taille de l'image
		$NouvelleLargeur_mini = 250; //Largeur choisie à 100px mais modifiable
//Mini                                    
		$NouvelleHauteur_mini = $TailleImageChoisie[1] * $NouvelleLargeur_mini / $TailleImageChoisie[0];
	
   
$image = imagecreatefrompng($fichier);
$NouvelleImage_mini = imagecreatetruecolor($NouvelleLargeur_mini , $NouvelleHauteur_mini ) or die ("Erreur");
$resampled = imagecopyresampled($NouvelleImage_mini , $NouvelleImage_mini , 0, 0, 0, 0, $NouvelleLargeur_mini, $NouvelleHauteur_mini, $TailleImageChoisie[0],$TailleImageChoisie[1]);
 
// on dessine notre image PNG  
 $lien = imagepng ($NouvelleImage_mini , 'upload/redim/11111111-mini.png', 100);  
 echo''.$lien.'';
 
?> 


la variable $lien que j'ai mit en echo me retourne "1" mais rien n'a été uploader.
je ne voit toujours pas le problème dans mon script
Pour info, regarde bien les valeurs possibles pour le troisième paramètre pour imagepng().

J'avais fait cette fonction il y a un petit moment maintenant. Elle ne conserve pas la transparence des .png une fois redimensionné mais ça te permettra au moins de tester quelque chose qui marche (puisque je l'ai testée) :
/*
 *	Redimensionne une image d'après les dimensions données. Garde
 *	les proportions de l'image si l'une des dimensions vaut null.
 *	Renvoie le chemin vers la nouvelle image, ou false en cas d'erreur.
 *
 *	$path : chemin de l'image à redimensionner
 *	$destWidth : nouvelle longueur de l'image
 *	$destHeight : nouvelle hauteur de l'image
 *	$newPath : nouveau chemin de l'image
 */
function resizeImage($path, $destWidth, $destHeight = null, $newPath = null)
{
	if (!file_exists($path))
		return false;
	$newPath = $newPath ? $newPath : $path;

	list($srcWidth, $srcHeight, $type) = getimagesize($path);
	$type	= str_replace('image/', '', image_type_to_mime_type($type));
	$destHeight = $destHeight ? $destHeight : ($destWidth * $srcHeight / $srcWidth);
	$destWidth = $destWidth ? $destWidth : ($destHeight * $srcWidth / $srcHeight);

	$imageCreateFromMime = 'imagecreatefrom'.$type;
	$src = $imageCreateFromMime($path);
	if (!$dest = imagecreatetruecolor($destWidth, $destHeight))
		return false;
	if (!imagecopyresampled($dest, $src, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight))
		return false;
	$imageMime = 'image'.$type;
	if (!$imageMime($dest, $newPath))
		return false;

	return $newPath;
}

Modifié par phpdoesnotcare (09 May 2010 - 14:49)