【问题标题】:Upload and then resize images上传并调整图像大小
【发布时间】:2013-03-09 10:05:00
【问题描述】:

我在上传简单图片时遇到问题。我已经尝试过,只有在添加图像调整大小功能后,上传部分才能完美运行,但会出现未知错误。

public function post_add_image()
  {
    \Upload::process(array(
        'path'        => '../images/',
        'normalize'   => true,
        'change_case' => 'lower',
        'randomize'   => true,
        'ext_whitelist' => array('jpeg', 'jpg', 'gif', 'png'),
        'max_size'    => 1024 * 1024,

    ));

    if (!\Upload::is_valid()) {
      return $this->response(\Upload::get_errors());
    } else {
      foreach (\Upload::get_files() as $file) {

        // Here comes ERROR
        $image = Image::load($file['file'], false, $file['extension']);
        $image->crop_resize(800, 600);
        $image->save('test');

      }
    }

    //\Upload::save();

    return $this->response(\Upload::get_files());
  }

还有错误:

RuntimeException [错误]:库不支持 /tmp/phpOnZReS 的这种文件类型。

COREPATH/classes/image/driver.php@line

我对上传的文件做了var_dump:

array(10) {
  ["name"]=>
  string(27) "crunchbang-logo-minimal.png"
  ["type"]=>
  string(9) "image/png"
  ["error"]=>
  bool(false)
  ["size"]=>
  int(278)
  ["field"]=>
  string(10) "pictures:0"
  ["file"]=>
  string(14) "/tmp/phpDdTLwJ"
  ["errors"]=>
  array(0) {
  }
  ["extension"]=>
  string(3) "png"
  ["filename"]=>
  string(23) "crunchbang-logo-minimal"
  ["mimetype"]=>
  string(9) "image/png"
}

【问题讨论】:

  • 您使用的是什么版本的 FuelPHP?强制图像扩展仅在 1.3 版中可用。
  • 好吧,我使用的是 1.5 版 linux,是的,gd 扩展已加载。至少在图像已上传到服务器后,图像大小调整工作,但此移动需要额外的资源。
  • 必须检查上传路径是否正确?您可以尝试将图像放在资产文件夹中而不是 ../image 中吗?
  • 是的,路径是正确的,即使燃料向我显示警告操作将完成并创建文件,但这不是完美的解决方案。
  • 这个错误似乎与“图像加载”方法有关,与上传无关。 “图片加载”只能加载公共资产文件夹中的图片,确定您的上传功能将新图片放在那里吗?

标签: upload fuelphp


【解决方案1】:

这会有所帮助(在调整文件大小之前,您必须将图像文件保存在公共资产或任何您想要的位置)

public function post_add_image()
{
    \Upload::process(array(
    'path'        => '../images/',
    'normalize'   => true,
    'change_case' => 'lower',
    'randomize'   => true,
    'ext_whitelist' => array('jpeg', 'jpg', 'gif', 'png'),
    'max_size'    => 1024 * 1024,

    ));

   if (!\Upload::is_valid()) {
       return $this->response(\Upload::get_errors());
   } else {

       // Here comes the fix

       Upload::save();
       $saved_image = Upload::get_files();
       $original_name = $saved_image[0]['name'];
       $file_name = $saved_image[0]['saved_as'];  

       $public_asset_path_img = "assets".DS."img";

       $image = Image::load(DOCROOT.$public_asset_path_img.DS.$file_name, false, $file['extension']);
       $image->resize('800');
       $image->save(DOCROOT.$public_asset_path_img.DS.$file_name);


   }

   return $this->response(\Upload::get_files());
}

【讨论】:

    【解决方案2】:

    我认为您的问题可能是在您尝试调整图像大小后调用Upload::save()。上传的文件将被放入 PHP tmp 文件夹,因此您的 /tmp/phpOnZReS

    尝试将您的 Upload::save() 移动到您的 foreach (\Upload::get_files() as $file) 循环之前,看看是否有帮助。

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 2023-04-11
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多