首页 > 解决方案 > 在 laravel 中旋转并保存照片

问题描述

我想在服务器上上传照片。但在此之前,我想旋转该图像。我的代码如下所示,

    $photo = $request->file($field);
    $temp = imagecreatefromjpeg($photo);
    $rotated = imagerotate($temp, 270, 0);
    $extension = $photo->getClientOriginalExtension();
    $flieNametoStore = time()."___".explode('.',$photo->getClientOriginalName())[0].'.'.$extension;
    Storage::disk('public')->put($flieNametoStore,  $rotated); 

它不工作。它显示错误,如supplied resource is not a valid stream resource. 我也试过Storage::disk('public')->put($flieNametoStore, File::get($rotated));了,但还是不行。

所以,我有两个问题。我可以做些什么来实现我的目标?(旋转并保存在服务器中。)另外,我使用了 imagecreatefromjpeg 函数。但是,我想对其他文件类型执行相同的代码。(laravel 图像验证支持的所有类型。)

我在 SO 中搜索并发现了一些类似的问题。但是,这些解决方案并没有给我我想要的输出。

标签: phplaravelimage

解决方案


使用 imagejpeg 功能保存照片

imagerotate 返回一个 gd 资源类型而不是资源...

$photo           = request()->file($field);
$temp            = imagecreatefromjpeg($photo);
$rotated         = imagerotate($temp, 270, 0);
$extension       = $photo->getClientOriginalExtension();
$flieNametoStore = time() . "___" . explode('.', $photo->getClientOriginalName())[0] . '.' . $extension;
imagejpeg($rotated,  $flieNametoStore);

或者

ob_start();
imagejpeg($rotated);
$rotated = ob_get_contents();
ob_clean();
Storage::disk('public')->put($flieNametoStore, $rotated);

推荐阅读