我已经阅读了有关 laravel 上图像干预实现的文档,并且我成功地做到了,我还阅读了有关如何使用干预的文档,但我似乎无法弄清楚如何将所有上传的图像转换为 jpg 并将它们保存到带有.jpg扩展名的所需路径。
到目前为止,这是我的代码,它正在运行,但几乎没有故障。
Image::make(Input::file('avatarfull'))->fit('192', '192')->save(base_path() . '/img/' . $imagename .'.jpg')->encode('jpg', 80);
所以我想要实现的是:
- 从输入::文件('头像全')中获取上传的图像
- 使用干预包抓取图像 图像::make(输入::文件('头像完整')
- 将图像大小调整为所需的宽度和高度 ->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扩展名的图像名称,或者我必须手动命名?
>我认为您需要在调用save()
之前调用encode()
,因为保存实际上将图像保存到磁盘。
$jpg = (string) Image::make('public/foo.png')->encode('jpg', 75);
文档:http://image.intervention.io/api/encode
save() 方法根据此处的 API 文档接受 3 个参数
save([string $path, [int $quality], [string $format]])
所以你可以这样称呼它
->save(base_path().'/img/'.$imagename.'.jpg', 'jpg')
您也可以通过这种方式指定图像质量(可能是为了减小尺寸)
->save(base_path().'/img/'.$imagename.'.jpg', '85', 'jpg')