带Laravel 5.4存储的图像干预 [英] Image Intervention w/ Laravel 5.4 Storage

查看:44
本文介绍了带Laravel 5.4存储的图像干预的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用存储外观来存储能正常工作的化身,但我想像在laravel的早期版本中那样调整图像的大小. 我该怎么做呢? 这是我到目前为止的所有信息(无效)

I'm using the storage facade to store a avatar which works fine, but I want to resize my image like I did in previous versions of laravel. How can I go about doing this? Here is what I have so far (doesn't work)

  $path   = $request->file('createcommunityavatar');
  $resize = Image::make($path)->fit(300);
  $store  = Storage::putFile('public/image', $resize);
  $url    = Storage::url($store);

错误消息:

  Command (hashName) is not available for driver (Gd).

推荐答案

您正在尝试将错误的对象传递到putFile中.该方法需要File对象(而不是Image).

You're trying to pass into putFile wrong object. That method expects File object (not Image).

$path   = $request->file('createcommunityavatar');

// returns \Intervention\Image\Image - OK
$resize = Image::make($path)->fit(300);

// expects 2nd arg - \Illuminate\Http\UploadedFile - ERROR, because Image does not have hashName method
$store  = Storage::putFile('public/image', $resize);

$url    = Storage::url($store);

好吧,现在我们了解了主要原因之后,我们来修复代码

Ok, now when we understand the main reason, let's fix the code

// returns Intervention\Image\Image
$resize = Image::make($path)->fit(300)->encode('jpg');

// calculate md5 hash of encoded image
$hash = md5($resize->__toString());

// use hash as a name
$path = "images/{$hash}.jpg";

// save it locally to ~/public/images/{$hash}.jpg
$resize->save(public_path($path));

// $url = "/images/{$hash}.jpg"
$url = "/" . $path;

假设您要使用Storage Facade:

Let's imagine that you want to use Storage facade:

// does not work - Storage::putFile('public/image', $resize);

// Storage::put($path, $contents, $visibility = null)
Storage::put('public/image/myUniqueFileNameHere.jpg', $resize->__toString());

这篇关于带Laravel 5.4存储的图像干预的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆