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
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.
$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
Vous devez vous connecter pour publier un commentaire.
Votre PHP ne peut pas être compilé avec le support pour ces formats. Exécuter un phpinfo() et inspectez la sortie de quelque chose comme ceci:
Merci pour l'aide! Il y avait un avertissement, que je ne pouvais pas le voir parce que, après le traitement, j'ai été en redirigeant la page sur le formulaire de téléchargement. S'avère que je n'ai pas de libPNG et je ne savais pas ces fonctions ne font pas partie de mes bibliothèques PHP. Maintenant, je vais le télécharger et de l'essayer si mon code fonctionne.
OriginalL'auteur Alex Howansky
Puisque vous semblez être un corrompu de 33 octets du fichier image à chaque fois pour les images, puis d'autres jpg, cela pourrait être une erreur PHP qui est écrit dans le fichier (car il semble que votre fichier PHP affiche le contenu de l'image directement à partir de votre Type de Contenu d'en-tête). Avez-vous essayé d'ouvrir le fichier dans un éditeur de texte et de voir son contenu? Si son garbeled ordure, alors c'est une erreur, mais si ses un PHP warning, votre version de PHP n'a sans doute pas de soutien pour les personnes étendue des types d'images. Que, ou il pourrait être un avertissement dans votre code quelque part.
Il y avait un avertissement, que je ne pouvais pas le voir parce que, après le traitement, j'ai été en redirigeant la page sur le formulaire de téléchargement. S'avère que je n'ai pas de libPNG et je ne savais pas ces fonctions ne font pas partie de mes bibliothèques PHP. Maintenant, je vais le télécharger et de l'essayer si mon code fonctionne. Merci pour l'aide!
Je suis de la même 33 octets des fichiers png. Dans un éditeur de texte, je vois: "Image PNG: fichier.png’ pixelWidth: <nul> pixelHeight: <nul>" phpinfo montre que j'ai tout activé correctement. Des idées?
Juste résolu: imagepng n'accepte pas 80 comme la compression, doit être de 0 à 9
OriginalL'auteur Jeff Geisperger