图片已上传但尺寸仍与来源相同

时间:2015-01-06 16:11:31

标签: php upload dimensions

if ( $_FILES["ufile"]["type"] [$i] == "image/jpeg" || $_FILES["ufile"]["type"] [$i] == "image/jpg" || $_FILES["ufile"]["type"] [$i] == "image/png" || $_FILES["ufile"]["type"] [$i] == "image/gif" ) 
{
    if ($_FILES["ufile"]["type"] [$i] == "image/png" || $_FILES["ufile"]["type"] [$i] == "image/gif" || $_FILES["ufile"]["type"] [$i] == "image/jpeg" || $_FILES["ufile"]["type"] [$i] == "image/jpg" ) 
    {
        $file=$_FILES["ufile"]["tmp_name"];
        list($width, $height) = getimagesize($file);
        $new_width = 200;
        $new_height = 500;
        $dst_image = imagecreatetruecolor($new_width,$new_height);
        $src_image = imagecreatefromjpeg($_FILES["ufile"]["tmp_name"]);
        imagecopyresized ($dst_image, $src_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

        imagejpeg(imagecreatefromstring(file_get_contents($dst_image)), "convert.jpg");
        $actual_image_name = $name[$i].'.'.'jpg';
        move_uploaded_file("convert.jpg", $path.$actual_image_name);
    }
}

1 个答案:

答案 0 :(得分:0)

你完全误用了GD。 $dst_image是GD图像句柄。 文件。因此...... file_get_contents()将返回布尔值FALSE,因为您尝试从文件名中获取内容。 imagecreatefromstring()将返回布尔值false,因为布尔值false是而不是图像字符串,并且imagejpeg()将返回布尔值FALSE,因为您没有将它传递给GD句柄。

简而言之,您的代码可以带来一些改进。你只是假设什么都不会出错,不要检查失败,那些失败通过代码传播。

你真正需要的只是

image_jpeg($dst_image, 'convert.jpg');

然后您的move_uploaded_file失败,因为“convert.jpg”不是上传的文件。这是您自己在服务器上创建的文件。它可能基于上传的文件,但其本身上传的文件。为什么不呢

image_jpeg($dst_image, "$path/$actual_image_name");