Laravel 5.7 + Intervention Image:图像源不可读

3

我创建了一个上传图片及其标题、描述等内容的应用程序。但是,我在一些图片上传时遇到了问题,它返回了一个错误("Image source not readable"),如下所示:

enter image description here

以下是我的代码:

$image = $request->file('image');
// $image = Input::file('image'); // already tried this one still same problem

$orginal_filename = $image->getClientOriginalName();
$ext = $image->getClientOriginalExtension();
$fileName = md5(microtime() . $orginal_filename) . '.' . $ext;

$img = Image::make($image->getRealPath());
$img->stream();
$img->resize(1200, null, function ($constraint) {
    $constraint->aspectRatio();
}); 

Storage::disk('storage_dir')->put($dir . $fileName, $img, 'public');

已经尝试了以下解决方案:

  • 更改为Input :: file('file')
  • 检查请求Content-Type是否为multipart / form-data (请求已经具有multipart / form-data Content-Type)
  • 将Intervention Image驱动程序从"gd"更改为"imagick"

但仍然出现“图像源不可读取”错误。

注意:错误仅发生在某些图像中。(我还尝试将产生错误的图像移动到另一个目录,但仍然出现错误)。

非常感谢您的帮助!


你是否正在使用HTML表单上传图片? - Muhammad Sipra
尝试先查看图像的类型,可以使用以下命令查看格式:identify "IMG PATH" - Ali Al-Estarbadee
我正在使用一个HTML表单,将其附加到FormData中,然后发送一个POST请求。 - Edwin Bermejo
@Ali Mohammed,抱歉我不明白,请您详细说明一下? - Edwin Bermejo
@EdwinBermejo,请检查您的输入参数,特别是图像参数,通过在服务器端打印您的参数来查看。这样,我们就能够看到您从表单中接收到的数据类型。 - Muhammad Sipra
显示剩余3条评论
5个回答

5
你可以尝试运行我的代码。
if ($request->file('photo')->isValid()) {
        $avatar = $request->file('photo');

        $filename = time() . '.' . $avatar->getClientOriginalExtension();

        Image::make($avatar)->resize(300, 300)->save( public_path('/uploads/avatars/' . $filename) );

    }

/uploads/avatars/ 是我的目录。


谢谢这个,也需要这个 ^_^ - Edwin Bermejo

5
如果在 Laravel 5.7 项目中遇到问题,并且您将图片存储在 storage 文件夹中,可以尝试在终端输入以下命令来解决问题:
php artisan storage:link

如果你从 Github 或 Bitbucket 克隆了项目,就可能会遇到这个问题。

2
抱歉打扰各位!似乎是我的错,我没有意识到php post_max_sizephp upload_max_file_size。由于我尝试上传的图片大小超过了8MB,所以我只增加了post_max_size,而没有增加upload_max_file_size,因为我只将其增加了2(声明:4MB)。
顺便感谢大家的帮助和建议!

由于某种原因,这解决了我的问题。我的服务器的upload_max_file_size只有2MB,而我正在上传一个4MB的文档。多么令人误解的错误信息! - PinoyStackOverflower

1

替换

$resize = Image::make('storage/app/public/'.$user->image)->resize(300,300);

使用

$resize = Image::make(storage_path('app/public/'.$user->image))->resize(300,300);

提供存储的完整路径将解决问题。


0
如果您在服务器上遇到此错误,需要确保将所有图像都推送到服务器。您遇到此错误是因为服务器找不到或无法读取图像/图像。
- > 确保已上传图像/图像 - > 使图像/图像可读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接