ErrorException: imagecreatetruecolor(): Intervention\Image\Image::resize() 时文件中的图像尺寸无效

ErrorException: imagecreatetruecolor(): Invalid image dimensions in file while Intervention\Image\Image::resize()

我正在处理 Laravel 项目,我需要调整图像大小,并 return 从控制器将其作为文件。如果图像的宽度或高度参数等于 0,我必须计算另一个参数。 我这样试过(因为我在库 http://image.intervention.io/api/resize 的文档中找到了它):

public function viewImage($w, $h, $path){
    $image = Image::where('path', $path)->first();
    if($image){
        $manager = new ImageManager(array('driver' => 'gd'));
        if ($w === 0){
            $img = $manager->make(asset("storage/galleries/".$image->fullpath))
                ->resize($w, $h, function ($constraint) {
                    $constraint->aspectRatio();
                });
            return $img->response('jpg');
        }
        else{
            if ($h === 0){
                $img = $manager->make(asset("storage/galleries/".$image->fullpath))
                    ->resize($w, $h, function ($constraint) {
                        $constraint->aspectRatio();
                    });
                return $img->response('jpg');
            }
            $img = $manager->make(asset("storage/galleries/".$image->fullpath))->resize($w, $h);
            return $img->response('jpg');
        }
    }
...

但它给我这样的错误:

ErrorException: imagecreatetruecolor(): Invalid image dimensions in file C:\xampp\htdocs\PROGRAMATOR.SK_API\vendor\intervention\image\src\Intervention\Image\Gd\Commands\ResizeCommand.php on line 47

我使用 Intervention\Image\Image 库

你能帮帮我吗?

首先,laravelreturn字符串中的路由参数。所以 $w$h 是字符串。 你有这些选择

  1. 在函数的开头将 $w$h 转换为 int

    $w = intval($w);

    $h = intval($h);

  2. 更改您的条件比较。 PHP 能够比较 String 和 int 值。您当前的比较 return 每次都是错误的。请记住,"0" === 0 将始终导致 false,因为 php 也会比较变量类型。但是,如果您使用 "0" == 0 这将 return true.

此外,在宽度或高度为 0"0" 的情况下,将其更改为 null,因此调整大小方法将按预期工作。

Take a look at documentation once more