сохранить поток изображений в Laravel - PullRequest
1 голос
/ 20 июня 2019

В моем контроллере Laravel я пытаюсь взять строку данных png-изображения, а затем сохранить ее как png в хранилище, используя put:

$image_string = $request->get('image_string', false);
$filename = 'temp_image';

if ($image_string) {
    $resource = imagecreatefromstring($image_string);
    Log::debug("Storing image");
    if ($resource !== false) {
        Storage::put('public/' . $filename . '.png', imagepng($resource));
    } else {
        Log::error("Failed to get resource from string");
    }
}

Если я отключу толькоimagecreatefromstring($image_string) и imagepng($resource) частей, файл создается как положено.Но где-то в Storage::put изображение либо повреждено, либо потеряно, поскольку, хотя изображение с правильным именем файла и расширением существует, оно не имеет данных и при просмотре выглядит как черный ящик.

Есть ли другоекак мне обработать процедуру хранения изображений?

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Благодаря @Stefano Cortese и @ sykez-- решение представляло собой смесь обеих идей.

$image_string = $request->get('image_string', false);
$filename = 'temp_image';

if ($image_string) {
    $resource = Image::make($image_string)->encode('png');
    Log::debug("Storing image");
    if ($resource !== false) {
        Storage::put("public/{$filename}.png", (string) $resource);
    } else {
       Log::error("Failed to get resource from string");
    }
}
0 голосов
/ 20 июня 2019

Я думаю, проблема в том, что вы не можете изменить расширение изображения для каждого типа изображений таким образом.

Проверьте эту библиотеку PHP для работы с изображениями: http://image.intervention.io/getting_started/introduction

Вы можете легко интегрировать ее в Laravel, и есть API для преобразования изображений в различные форматы: http://image.intervention.io/api/encode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...