laravel和图片介入,如何将所有图片转为jpeg并保存Input::file?

laravel and image intervention, how to convert all images to jpeg and save from Input::file?

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

到目前为止,这是我的代码,它可以正常工作,但有一些小问题。

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

所以我想要实现的是:

这全部来自干预网站的文档。

但是在这个过程中出现了问题,所以我最终在我的 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 扩展名的图像名称,或者我必须手动命名?

我认为您需要在调用 save() 之前调用 encode(),因为保存实际上是将图像保存到磁盘。

$jpg = (string) Image::make('public/foo.png')->encode('jpg', 75);

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

根据API Documentation here

save()方法接受3个参数

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

所以你可以这样称呼它

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

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

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