Круглые углы изображения с использованием изображения вмешательства и 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"));