#php #laravel #intervention #laravel-api
#php #laravel #вмешательство #laravel-api
Вопрос:
Можно ли вернуть изображение, созданное «на лету» с помощью ресурсов Laravel API, не сохраняя его? Пробовал в контроллере
$sum = Product::where('slug', $product)->first();
$img = Image::make('image_path')->resize(400, 400);
$img->text(name, 205, 138, function($font) {
$font->file('fonts/BostonHeavy.woff');
$font->size(42);
$font->color('#ffffff');
$font->align('center');
$font->valign('top');
});
return (new ProductResource($sum))->foo($img);
Ресурс API Laravel
<?php
namespace AppHttpResources;
use IlluminateHttpResourcesJsonJsonResource;
class ProductResource extends JsonResource
{
protected $image;
public function foo($value){
$this->image = $value;
return $this;
}
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'image' => $this->image,
];
}
}
что возвращается
{
"data": {
"id": 1,
"name": "Such a pickle",
"image": {
"encoded": "",
"mime": "image/jpeg",
"dirname": null,
"basename": null,
"extension": null,
"filename": null
}
}
}
Очевидно, что это не работает в документах, в которых указано использовать return $img->response(‘jpg’); который сам по себе работает, но я хочу добавить его в ответ вместо выполнения двух запросов get.
Ответ №1:
Насколько я понимаю, вы хотите вернуть что-то, что вы можете использовать внутри src
атрибута в img
теге. Попробуйте это:
$imgBase64 = (string) $img->encode('data-url');
return (new ProductResource($sum))->foo($imgBase64);
Затем используйте эту строку в img
теге с соответствующим синтаксисом:
<img src="data:image/jpeg;base64, <<yourEncodedStringHere>>" />