干预图像+ Laravel的文件存储:存储调整大小/解码后的base64图像(干预图像encode()不起作用)

时间:2018-07-11 04:40:12

标签: php laravel intervention laravel-storage

  • 我正在使用Croppie jQuery插件,该插件返回以base64编码的裁剪图像

  • 提交表单后(裁剪后的图像中编码为 )-我使用Intervention Image库对其进行解码和调整大小:

    public function decodeResizeAndStore(Request $request)
    {
        $croppie_code = $request->croppie_code;
    
        // https://stackoverflow.com/a/11511605/4437206
        if (preg_match('/^data:image\/(\w+);base64,/', $croppie_code, $type)) {
            $encoded_base64_image = substr($croppie_code, strpos($croppie_code, ',') + 1);
            $type = strtolower($type[1]);
    
            $decoded_image = base64_decode($encoded_base64_image);
    
            $resized_image = Image::make($decoded_image)->resize(300, 200);
    
            // AND NOW I WANT TO STORE $resized_image using Laravel filesystem BUT...
        }
    }
    

最后,我想使用Laravel's filesytem (File Storage)存储调整大小的图像,这就是我遇到的问题-当我尝试这样做时:

Storage::put($path, (string) $resized_image->encode());

...不起作用。实际上,它正在正常工作-看起来有些内存泄​​漏或某些东西,浏览器的选项卡死了,我的RAM和CPU使用率很高...

所以我刚刚尝试过:

dd($resized_image->encode());

...是的,这肯定是崩溃的地方-使用encode()方法时。

我不确定为什么会这样,也许是因为我不是在处理标准图片上传,而是在解码的base64上进行?

但是,另一方面,Intervention Image可以从base64以及从解码的base64创建新的图像实例:http://image.intervention.io/api/make ...而且就我而言,这行得通:

$resized_image = Image::make($decoded_image)->resize(300, 200);

然后我可以使用save()方法,一切正常。但是我需要使用Laravel's File Storage

你知道我该怎么办吗?

1 个答案:

答案 0 :(得分:0)

假设您使用的是最新版本的Laravel(5.7):

您可以像这样使用stream方法:

// use jpg format and quality of 100
$resized_image = Image::make($decoded_image)->resize(300, 200)->stream('jpg', 100);
// then use Illuminate\Support\Facades\Storage
Storage::disk('your_disk')->put('path/to/image.jpg', $resized_image); // check return for success and failure