I want to upload and resize pictures with different extensions. The php crops the biggest possible square from the center of the original pic, then saves it in 360*360 pixels.
The code works fine with jpeg files, but with gif, bmp and png I get a corrupted file with 33 Byte size.
Here's most of the 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);
}
So, only jpeg files are processed correctly, gif, png and bmp files aren't. I'm out of ideas...
Thanks in advance!
Your PHP may not be compiled with support for those formats. Run a phpinfo() and inspect the output for something like this:
GD Support => enabled
GD Version => bundled (2.0.34 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
PNG Support => enabled
libPNG Version => 1.2.10
Since you seem to be getting a corrupt 33 byte image file every time for images other then jpg, this could be a PHP error that is getting written to the file (since it seems like your PHP file is displaying the image contents directly, from your Content Type header). Have you tried opening the file in a text editor and seeing its contents? If its garbeled junk, then its an error, but if its a PHP warning, your version of PHP probably doesn't have support for those extended image types. That, or there could be a warning in your code somewhere.
$type
? Seems like the likely answer is that it is always2
.. - DaveRandom 2012-04-05 15:57