0

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);

Laravel API リソース

<?php

namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;

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'); を使用するように指示されているドキュメントでは機能していません。それ自体は機能しますが、2 つの get リクエストを行う代わりに、それをレスポンスに追加したいと考えています。

4

1 に答える 1

0

私が理解していることから、タグのsrc属性内で使用できるものを返したいと考えています。imgこれを試して:

$imgBase64 = (string) $img->encode('data-url');
return (new ProductResource($sum))->foo($imgBase64);

次に、その文字列をimg適切な構文のタグで使用します。

<img src="data:image/jpeg;base64, <<yourEncodedStringHere>>" />
于 2020-12-02T17:38:07.367 に答える