phpimagefile-uploadmultipartform-datagd

Accessing info about file uploaded in PHP and modifying with GD


I am uploading an image that is included in the $_FILES object. However, when I attempt to get its size, I get the error that it is not a string or alternatively not a resource... How can I get the size of this image and, in turn, modify it in GD. Do I have to convert it to a string? Or what do these methods want as their input.

$image = $_FILES['uploaded_file'];
var_dump($image);

$oldw = imagesx($image);
$oldh = imagesy($image);

$imagedetails = getimagesize($image);
$width = "width".$imagedetails[0];
$height = "height".$imagedetails[1];
$neww = 512;
$newh = 512;
$temp = imagecreatetruecolor($neww, $newh);
imagecopyresampled($temp, $image, 0, 0, 0, 0, $neww, $newh, $oldw, $oldh);

//Error messages:

imagesx() expects parameter 1 to be resource
imagesy() expects parameter 1 to be resource
getimagesize() expects parameter 1 to be string

//Here is what the var_dump of image 
array(5) {
  ["name"]=>
  string(14) "image.png"
  ["type"]=>
  string(24) "application/octet-stream"
  ["tmp_name"]=>
  string(14) "/tmp/phpLlon22"
  ["error"]=>
  int(0)
  ["size"]=>
  int(2743914)

Thanks in advance for any suggestions.


Solution

  • Both imagesx and imagesy require an opened image, i.e. already loaded into memory.
    getimagesize requires a filename but $image is an array. You have to pass $_FILES['uploaded_file']['tmp_name'] to it.
    Also, you have to create an image resource from the uploaded image before you can resample it.

    $imagefile = $_FILES['uploaded_file']['tmp_name'];
    var_dump($image);
    
    $imagedetails = getimagesize($imagefile);
    $oldw = $imagedetails[0];
    $oldh = $imagedetails[1];
    
    $width = "width".$imagedetails[0];
    $height = "height".$imagedetails[1];
    $neww = 512;
    $newh = 512;
    $image = imagecreatefromstring(file_get_contents($imagefile));
    $temp = imagecreatetruecolor($neww, $newh);
    imagecopyresampled($temp, $image, 0, 0, 0, 0, $neww, $newh, $oldw, $oldh);