【发布时间】:2017-02-03 20:38:06
【问题描述】:
使用 Vagrant 和 Homestead 运行 Laraval 5.4。
看到有关此问题的其他一些问题,但没有提供使用 Intervention/Image 的 canvas() 方法的解决方案
Laravel 引入了easier storage system since 5.3
我当前的代码:
$path = $request->file('logo')->store('/clients/logos','public');
$canvas = Image::canvas($width, $height);
$image = Image::make($path)->resize($width, $height, function ($constraint)
{
$constraint->aspectRatio();
});
$canvas->insert($image, 'center');
$canvas->save($path);
$this->logo_path = $path;
此代码创建一个画布并在其中放置一个调整大小的图像。
此代码给出以下错误:
AbstractDecoder.php 第 335 行中的 NotReadableException:图像源不是 在 AbstractDecoder.php 第 335 行中可读 AbstractDecoder->init('clients/logos/UupUn1iuDGRsy5Z0bkWHJ6S4v79bfZiXapTO7vLk.jpeg') 在 AbstractDriver.php 第 64 行
第一行有效,因为图像存储在我的存储文件夹中的以下位置:
“/storage/app/public/clients/logo/UupUn1iuDGRsy5Z0bkWHJ6S4v79bfZiXapTO7vLk.jpeg”
但图像以全尺寸存储,因此代码在图像干预部分失败。
我尝试过的事情:
我尝试将 Image::make() 中的 $path 变量更改为:
Storage::disk('public')->url($path)
导致以下错误: 无法将图像数据写入路径
(http://test.dev/storage/clients/logos/owjNA5Fn9QyYoS0i84UgysaFLo5v0NzbOiBhBzXp.jpeg)
关于该错误的奇怪部分是“app”目录在该错误中不可见。
我没有办法解决这个问题。
编辑
不使用画布也能正常工作,但仍然想知道使用 canvas() 的方法
这就是我目前的工作方式:
$path = $logo->hashName('public/clients/logos');
$image = Image::make($logo);
$image->resize($width, $height, function ($constraint)
{
$constraint->aspectRatio();
});
Storage::put($path, (string) $image->encode(), 'public');
$this->logo_path = $path;
检索图像
{{Storage::url($client->logo_path)}}
【问题讨论】:
-
我相信这是一个文件权限问题。尝试使用适当的用户权限设置存储。
-
图像保存在存储文件夹中,只是调整大小。所以它可以写入文件夹。我尝试将其设置为 777,但这也没有解决问题
-
我猜这是因为
$path变量。在这里查看:Refence #1 或者你可以试试这个人在Reference #2 中所做的事情。祝你好运。 -
@Christophvh laravel 版本是什么?标题包含
5.3,但标签中带有5.4
标签: php laravel intervention laravel-5.4