Я использую плагин jQuery Croppie, который возвращает обрезанное изображение, закодированное в base64. .
После отправки формы (с обрезанным изображением, закодированным в base64) я декодирую и изменяю его размер, используя Библиотека интервенционных изображений:
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 (хранилище файлов), и именно здесь я застрял - когда я пытаюсь это:
Storage::put($path, (string) $resized_image->encode());
... это не работает. На самом деле, что-то работает - похоже, что есть какая-то утечка памяти или что-то в этом роде, вкладка браузера зависает, использование ОЗУ и ЦП увеличивается...
Итак, я только что попробовал:
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.
Вы знаете, как я могу справиться с этим?