使用Vagrant和Homestead运行Laraval 5.4。使用带有图像干预画布的laravel存储()
看到关于此问题的其他一些问题,但没有提供它通过干预/图片使用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;
这代码创建一个画布并在其中放置一个调整大小的图像。
此代码提供了以下错误:
NotReadableException in AbstractDecoder.php line 335: Image source not readable in AbstractDecoder.php line 335 at AbstractDecoder->init('clients/logos/UupUn1iuDGRsy5Z0bkWHJ6S4v79bfZiXapTO7vLk.jpeg') in AbstractDriver.php line 64
第一线工作,因为图像是在以下位置存储在我的存储文件夹中:
“/存储/程序/公/客户/徽标/ UupUn1iuDGRsy5Z0bkWHJ6S4v79bfZiXapTO7vLk.jpeg“
但图像以全尺寸存储,因此代码在图像干涉部分失败。
事情我尝试: 我试图改变$path
变量中图片::使()这样的:
Storage::disk('public')->url($path)
这将导致以下错误: 不能图像数据写入路径
(http://test.dev/storage/clients/logos/owjNA5Fn9QyYoS0i84UgysaFLo5v0NzbOiBhBzXp.jpeg)
关于该错误的奇怪部分是'app'目录在该错误内部不可见。
我想尽办法解决这个问题。
编辑
得到它的工作,而无需使用帆布,但仍想知道的方式来使用画布()
这是我目前如何得到它的工作:
$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,但也没有解决问题 – Christophvh
我猜这是因为'$ path'变量。检查它在这里:[Refence#1](http://stackoverflow.com/questions/33468437/getting-error-notreadableexception-in-abstractdecoder-php-line-302/33469360#33469360)或者你可以试试这个人做了什么在[参考#2]中(http://stackoverflow.com/questions/41990023/how-to-save-uploaded-image-to-storage-in-laravel)。祝你好运。 –