Как использовать функции рисования PHP с Laravel

#php #laravel #http-headers

#php #laravel #http-заголовки

Вопрос:

Я пытаюсь использовать функции рисования фигур PHP с помощью фреймворка Laravel, но у меня возникли некоторые проблемы.

Итак, я просто чтобы проверить это, в основном просто скопировал пример из php.net и использовал его в закрытии и тестовом маршруте.

 Route::get('maptest', function()
{
$image = imagecreatetruecolor(200, 200);
$red = imagecolorallocate($image, 227, 32, 32);

imagefilledrectangle($image, 100, 80, 50, 25, $red);

header('Content-Type: image/png');

imagepng($image);
imagedestroy($image);
});
  

выполнение этого способа работает нормально.

проблема в том, что я добавляю a Controller и a View в микс. Когда я устанавливаю заголовки, а что нет, и создаю a Response , я получаю маленький значок сломанного изображения в верхнем левом углу окна, и на странице вообще ничего не загружается.

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

 public function show($id)
{
    $user = User::find($id);

    $view = View::make('profile/home', ['user' => $user]);

    $response = Response::make($view, 200);
    $response->header('Content-type', 'image/png');

    return $response;
}
  

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

Комментарии:

1. Почему вы устанавливаете значение Content-type to image/png , когда вы даже не выводите изображение?

2. я, это происходит в представлении профиля / дома

3. Это не так. Вы выводите HTML в браузер. Не файл изображения. Что произойдет, если вы закомментируете строку, в которой вы задаете Content-type заголовок? Вы видите HTML-страницу?

4. да, я вижу HTML, если я это прокомментирую. я думаю, я спрашиваю, где я должен установить заголовок для изображения, потому что, если я не установлю заголовок, функция imagepng() (в представлении) просто выводит кучу случайных символов.

5. Не вызывайте imagejpeg() в своем представлении. Вызовите его где-нибудь в другом месте (например, в вашем контроллере), захватите выходные данные с помощью выходного буфера и закодируйте их в base64. Оттуда вы можете просто использовать img HTML-тег со строкой base64 в качестве источника изображения. Другим решением было бы иметь другой контроллер, который выводит только изображение, а затем img указывает ваш тег на этот контроллер.