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

时间:2015-01-20 01:52:29

标签: php image laravel-4

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

到目前为止,这是我的代码,它正在工作但很少出现故障。

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

所以我想要实现的是:

  • 从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);

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

MSm72XvEWE8AlCUvpHvX

我决定手动添加.jpg扩展程序,你可以看到

->save(base_path() . '/img/' . $imagename .'.jpg')

这样可以在结尾处使用随机字符串名称和.jpg扩展名保存图像。

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

是否有办法将所有图像转换为jpg并自动使用.jpg扩展名编写图像名称,或者我必须手动命名?

2 个答案:

答案 0 :(得分:12)

我认为您需要在致电encode()之前致电save(),因为保存实际上会将图片保存到磁盘。

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

答案 1 :(得分:0)

save() 方法根据 API Documentation here 接受 3 个参数

save([string $path, [int $quality], [string $format]])

所以你可以这样称呼它

->save(base_path().'/img/'.$imagename.'.jpg', 'jpg')

您也可以通过这种方式指定图像质量(可能是为了减小尺寸)

->save(base_path().'/img/'.$imagename.'.jpg', '85', 'jpg')