Круглые углы изображения с использованием изображения вмешательства и laravel 5.4

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

Это мое главное изображение:

основное изображение

И вот мои изображения для вставки в основное изображение:

r1 image

r2 image

И, наконец, это изображение после вставки:

образец окончательного изображения

Ну, я использую этот код, чтобы сделать это:

    $img        = Image::make(asset('images/cover.png' ) )->encode('jpg', 15);

    $token      = Session::get('_token');

    $imgWidth   = $img->width();
    $imgHeight  = $img->height();

    $coverImages = Storage::allFiles('public/' . $token . '/cover');

    $r1 = Image::make(asset('storage/' . $token . '/cover/r1.png') );
    $r2 = Image::make(asset('storage/' . $token . '/cover/r2.png') );

    $r1->resize(80, 180, function ($constraint){
        $constraint->aspectRatio();
    });

    $r2->resize(80, 180, function ($constraint){
        $constraint->aspectRatio();
    });

    $img->insert($r1, 'top-left', 190, 175);
    $img->insert($r2, 'top-left', 290, 175);

    $img->save( public_path("storage/{$token}/111111.png"));

Теперь мне нужно округлить r1.png и r2.png, чтобы соответствовать main image.

Знаете ли вы, как я могу это сделать?

Спасибо в Advance

ПРИМЕЧАНИЕ.

Благодаря @Pascal Meunier, но

Мне нужно округлить r1.png углы сами по себе, потому что по каким-то причинам мне нужно сохранить округленное изображение в другом месте...

Ответ 1

Я нашел способ, используя canvas и вставляя r1 и r2 перед изображением main.

$cover = Image::make('main.png');
$r1 = Image::make('r1.png');
$r2 = Image::make('r2.png');

$r1->resize(80, 180, function ($constraint){
    $constraint->aspectRatio();
});

$r2->resize(80, 180, function ($constraint){
    $constraint->aspectRatio();
});

$canvas = Image::canvas(746, 738);

$canvas->insert($r1, 'top-left', 190, 175);
$canvas->insert($r2, 'top-left', 290, 175);
$canvas->insert($cover);

$canvas->save('final.png');

Результат выглядит следующим образом.

введите описание изображения здесь

Ответ 2

Я не пробовал это сам, но это можно сделать, используя mask method из класса Intervention. При этом вам понадобится другой образ белого закругленного прямоугольника с черным фоном для маски.

он должен работать следующим образом:

$img        = Image::make(asset('images/cover.png' ) )->encode('jpg', 15);

$token      = Session::get('_token');

$imgWidth   = $img->width();
$imgHeight  = $img->height();

$coverImages = Storage::allFiles('public/' . $token . '/cover');

$r1 = Image::make(asset('storage/' . $token . '/cover/r1.png') );
$r2 = Image::make(asset('storage/' . $token . '/cover/r2.png') );

$r1->resize(80, 180, function ($constraint){
    $constraint->aspectRatio();
})->mask('public/mask.png');

$r2->resize(80, 180, function ($constraint){
    $constraint->aspectRatio();
})->mask('public/mask.png');

$img->insert($r1, 'top-left', 190, 175);
$img->insert($r2, 'top-left', 290, 175);

$img->save( public_path("storage/{$token}/111111.png"));