Вывести во view динамически сформированное изображение
Вывести во view динамически сформированное изображение
Добрый день, уважаемые форумчане!
В контроллере динамически формирую изображение. Задача состоит в том, чтобы вывести это изображение во view.
Сохранять это изображение в файл, чтобы затем вывести по ссылке во view не хочется, т.к. потом этот файл придется удалять.
В php делал так <img src="file.php">, где file.php формировал изображение.
Как это можно сделать в yii2? Буду рад любой информации или идее.
Yii2 только осваиваю, поэтому прошу не ругать за банальный вопрос.
В контроллере динамически формирую изображение. Задача состоит в том, чтобы вывести это изображение во view.
Сохранять это изображение в файл, чтобы затем вывести по ссылке во view не хочется, т.к. потом этот файл придется удалять.
В php делал так <img src="file.php">, где file.php формировал изображение.
Как это можно сделать в yii2? Буду рад любой информации или идее.
Yii2 только осваиваю, поэтому прошу не ругать за банальный вопрос.
Re: Вывести во view динамически сформированное изображение
У тебя есть контроллер, который получает модель, где генерируется изображение. Дальше через контроллер ты передаешь нужную информацию на просмотр.
Изобразим это таким образом
Дальше в просмотре создаем изображение и запихиваем в него нужные параметры, которые берутся из твоей модели. Ну и нужные CSS пропишешь, какие нужны лично под твою задачу.
В модели у меня присутствует формирование src
Изобразим это таким образом
Код: Выделить всё
//отображение главной страницы
public function actionIndex()
{
$model = new Product;
return $this->render('index', [
'model' => $model,
]);
}
Код: Выделить всё
<?= Html::img($model->product_image_url, ['alt' => $model->product_file_title, 'width' => '25%', 'style' =>['position' => 'absolute', 'right' => '0', 'top' => '0']]) ?>
Код: Выделить всё
public function getproduct_image_url(){
return $this->product_file_base_url . $this->product_file_path;
}
Re: Вывести во view динамически сформированное изображение
Спасибо за подробный ответ, но это немного не то, что я хотел спросить.
Задача состоит в том, чтобы файл изображения, который сформирован динамически в модели или в контроллере вывести во вьюшке, т.е. файл изображения не сохранен и к нему нет пути.
Пример, есть файл file.php
<?php
$image = imageCreate(200, 50); //Создаем изображение
imagePNG($image); //Содаем png
return $image;
?>
На php выводится <img src="file.php">
КАК ТАКОЕ СДЕЛАТЬ В YII2?
Предположим модель возвращает $image. Как во вьюшке вывести это $image?
В Html::img(путь к файлу), а пути нет. есть само изображение.
Задача состоит в том, чтобы файл изображения, который сформирован динамически в модели или в контроллере вывести во вьюшке, т.е. файл изображения не сохранен и к нему нет пути.
Пример, есть файл file.php
<?php
$image = imageCreate(200, 50); //Создаем изображение
imagePNG($image); //Содаем png
return $image;
?>
На php выводится <img src="file.php">
КАК ТАКОЕ СДЕЛАТЬ В YII2?
Предположим модель возвращает $image. Как во вьюшке вывести это $image?
В Html::img(путь к файлу), а пути нет. есть само изображение.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Вывести во view динамически сформированное изображение
Код: Выделить всё
public function actionGetImage() {
\Yii::$app->response->format = yii\web\Response::FORMAT_RAW;
\Yii::$app->response->headers->add('Content-Type', 'image/png');
\Yii::$app->response->data = $this->getMyImageData(); //сформированное изображение
return \Yii::$app->response;
}
-
- Сообщения: 82
- Зарегистрирован: 2015.02.04, 16:31
Re: Вывести во view динамически сформированное изображение
Может вот это поможет -
В модели объявляете переменную img1 и в нее записываете изображение.
Код: Выделить всё
[
'attribute' => 'img1',
'value' => 'data:image/jpeg;base64,' . $model->img1,
'format' => ['image', ['width' => '100', 'height' => '100']]
],
С уважением, Дмитрий.
Re: Вывести во view динамически сформированное изображение
Спасибо, yiiliveext. То, что надо!
- proctoleha
- Сообщения: 298
- Зарегистрирован: 2016.07.10, 19:00
Re: Вывести во view динамически сформированное изображение
Хороший вопрос!
Как то я сам не додумался применить подобный принцип - отдавать не сохраненное изображение, а сгенерированную картинку. Щас решаю задачу - вывести произвольную надпись на картинке, согласно неким заданным условиям. Условия все пишутся в базу, и сохранять картинки с надписями смысла нет. Только лишний мусор.
Так что спасибо за тему.
У меня получилось так:
вьюха:
модель:
Как то я сам не додумался применить подобный принцип - отдавать не сохраненное изображение, а сгенерированную картинку. Щас решаю задачу - вывести произвольную надпись на картинке, согласно неким заданным условиям. Условия все пишутся в базу, и сохранять картинки с надписями смысла нет. Только лишний мусор.
Так что спасибо за тему.
У меня получилось так:
вьюха:
Код: Выделить всё
<?= Html::img($model->getWebPath(), ['class' => 'img-responsive']) ?>
Код: Выделить всё
public function getWebPath()
{
if ($this->text) {
$data = (new ImgTextService())->annotateImage(new DtoImg($this));
$img = 'data:' . $data['format'] . ';base64,' . base64_encode($data['img']);
return $img;
}
return self::PATH_TO_DIR . $this->path . '/' . $this->path . '.' . $this->ext;
}
Вот за что я не люблю линукс, так это за свои кривые, временами, руки