上传时调整多个图像的大小

时间:2014-03-22 11:26:57

标签: php image upload resize

嗨我试图在上传时调整多个图像的大小我有调整大小的功能,但它只能用于一个图像所以请任何人都可以告诉我如何循环这个以进行多个文件上传

if( $_FILES['image']['size']< $max_file_size ){
    // get file extension
    $ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
//  $ext = pathinfo($_FILES['files']['name'][$f], PATHINFO_EXTENSION);
    if (in_array($ext, $valid_exts)) {
        /* resize image */

        foreach ($sizes as $w => $h) {

            $files[] = resize($w, $h);

                        }

    } else {
        $msg = 'Unsupported file';
    }
} else{
    $msg = 'Please upload image smaller than 200KB';
}

1 个答案:

答案 0 :(得分:0)

这是未经测试的,但可能会给你一个想法。 这种方法的工作方式是循环遍历变量$iname的所有$ _FILES,即&#39; image&#39;。我设置了这个,因为它被多次使用,所以如果你改变它,它会更容易。

我创建了一个名为$image的新变量,它将是该特定图像的变量。我通过循环遍历$_FILES[$iname]的所有变量来做到这一点。我将$image变量设置为$key,将新值设置为数组。我们使用$i变量引用正确的数组。

接下来,我只使用您现有的代码。由于resize()函数只需要宽度和高度,我不确定这里会发生什么。应传递另一个参数以引用要调整大小的图像,该图像将为$image

从我输入的可见代码中,不知道resize()是什么,这段代码是不安全的。您应该检查的不仅仅是文件扩展名,因为它可以轻松更改。我通常使用exif来检查图像标题。我也从不存储用户上传的数据,除非我使用PHP中的GDI函数对其进行重新编码。

希望这会让你开始。

$i = 0;
$iname = 'image';
for($i = 0; $i < count($_FILES[$iname]['size']); $i++) {

   // Create new Image Array
   $image = array();
   foreach($_FILES[$iname] as $key => $val) {
     $image[$key] = $val[$i];
   }


   if( $image['size'] < $max_file_size ) {
      $ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
      if (in_array($ext, $valid_exts)) {
         foreach ($sizes as $w => $h) {
            // How is resize getting the $_FILES?
            // Should pass a variable of $image and use it instead
            $files[] = resize($w, $h);
         }
      } else {
        $msg = 'Unsupported file';
       }
    } else{
       $msg = 'Please upload image smaller than 200KB';
    }
}