laravel和图像干预,如何将所有图像转换为jpeg并从Input :: file中保存?

Ale*_*vić 7 php image laravel-4

我已经阅读了关于laravel上图像干预实施的文档,我成功地做了我也阅读了有关如何使用干预的文档,但我似乎无法弄清楚如何将所有上传的图像转换为jpg并将其保存到带有.jpg扩展名的所需路径.

这是我的代码到目前为止,它正在工作,但几乎没有毛刺.

 Image::make(Input::file('avatarfull'))->fit('192', '192')->save(base_path() . '/img/' . $imagename .'.jpg')->encode('jpg', 80);
Run Code Online (Sandbox Code Playgroud)

所以我想要实现的是:

  • 从Input :: file('avatarfull')获取上传的图像
  • 使用介入包来抓取图像Image :: make(Input :: file('avatarfull')
  • 将图像大小调整为所需的宽度和高度 - > fit()
  • 将图像保存到所需的路径 - >保存
  • 并将所有图像编码为jpg格式 - >编码

这些都来自干预网站的文档.

  • fit()应裁剪并将图像调整到所需的宽度和高度
  • save()将移动图像并保存到所需的路径
  • encode()应该将任何图像(bmp,png,gif)转换为jpg格式.

但是在进程中出现问题所以我最终得到的图像在我的img文件夹中没有任何扩展名,图像也没有转换为jpg格式.如果我上传png它会保持png.

为了记录,我决定使用随机字符串上传图像,所以

$imagename = str_random(20);
Run Code Online (Sandbox Code Playgroud)

因为我看到我的图像仅以随机字符串名称保存,所以对于上传的图像,我最终会得到如下名称:

MSm72XvEWE8AlCUvpHvX
Run Code Online (Sandbox Code Playgroud)

我决定手动添加.jpg扩展名,如您所见

->save(base_path() . '/img/' . $imagename .'.jpg')
Run Code Online (Sandbox Code Playgroud)

这样可以在最后用随机字符串名称和.jpg扩展名保存图像.

但是转换图像到jpg的问题仍然存在,所以当我上传png图像我现在得到MSm72XvEWE8AlCUvpHvX.jpg但是当我在浏览器中检查图像时它有透明背景,当我检查属性时图像仍然是png,它只是强制.jpg因为我将其添加到save()中.

是否有一种方法可以将所有图像转换为jpg并自动编写带有.jpg扩展名的图像名称,或者我必须手动命名?

小智 13

我认为你需要在打电话encode()之前打电话,save()因为保存实际上将图像保存到磁盘.

文档:http://image.intervention.io/api/encode

  • 是的,你是对的,我想通过几次组合尝试后,我得到了以下顺序 - > encode() - > fit() - > save() (2认同)