PHP imagecreatefromjpeg fonctionne, alors pourquoi ne pas png/bmp/gif travail?

Je veux le télécharger et redimensionner des images avec des extensions différentes. Le php cultures les plus grands possible place à partir du centre de l'image originale, puis l'enregistre sur 360*360 pixels.

Le code fonctionne très bien avec les fichiers jpeg, mais avec le gif, bmp et png-je obtenir un fichier corrompu avec 33 taille en Octets.

Voici la plupart du code:

$file_temp = $_FILES["pic"]["tmp_name"];
list ($width, $height, $type) = getimagesize ($file_temp);
$picture_name = "... a name.ext ...";
$upload = "... some dir/$picture_name";
if (move_uploaded_file($file_temp, "$upload"))
{
//switches content-type and calls the imagecreatefrom... function
if ($type == 1)
{
header ('Content-Type: image/gif');
$image = imagecreatefromgif($upload);
}
elseif ($type == 2)
{
header ('Content-Type: image/jpeg');
$image = imagecreatefromjpeg($upload);
}
elseif ($type == 3)
{
header ('Content-Type: image/png');
$image = imagecreatefrompng($upload);
}
else
{
header ('Content-Type: image/x-ms-bmp');
$image = imagecreatefromwbmp($upload);
}
$image_p = imagecreatetruecolor(360, 360);
//this code below should preserve transparency but I couldn't try it out for now...
if($type==1 or $type==3)
{
imagecolortransparent($image_p, imagecolorallocatealpha($image_p, 0, 0, 0, 127));
imagealphablending($image_p, true);
imagesavealpha($image_p, true);
}
//this part is for cropping
$x=0;
$y=0;
if ($width > $height)
{
$x= ($width - $height)/2;
$width = $height;
}
else
{
$y = ($height - $width)/2;
$height = $width;
}
imagecopyresampled ($image_p, $image, 0, 0, $x, $y, 360, 360, $width, $height);
if ($type == 1)
imagegif ($image_p, $upload, 80);
elseif ($type == 2)
imagejpeg ($image_p, $upload, 80);
elseif ($type == 3)
imagepng ($image_p, $upload, 80);
else
imagewbmp ($image_p, $upload, 80);
}

Ainsi, seuls les fichiers jpeg sont traitées correctement, gif, png et bmp fichiers ne le sont pas. Je suis à court d'idées...
Merci à l'avance!

Comment avez-vous remplir $type? Semble que la réponse probable est qu'il est toujours 2...
getimagesize() est la largeur, la hauteur, le type (de 0 à 16) et un attribut si je ne me trompe pas. le type n'est pas toujours à 2, ça change de la façon dont il le devrait.

OriginalL'auteur shirfy | 2012-04-05