使用 Intervention Image 和 Laravel 5.4 实现圆角图片

12

我需要使用 intervention image 和 laravel 将一些图像插入到另一张图片中。

这是我的主要图片:

主要图片

这些是要插入到主要图片中的图像:

r1 图片

r2 图片

最后得到的插入图片如下:

插入后的图片样例

下面是我用来实现这个功能的代码:

    $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.pngr2.png的角弧度调整以适应主图像

您知道我该如何做吗?

谢谢提前

注意:

感谢@Pascal Meunier,但是

因为某种原因,我必须单独为r1.png进行圆角处理,因为我必须再将圆角图像保存在另一个地方...


我认为这可以帮助你:https://dev59.com/N4rda4cB1Zd3GeqPOJRx - D Coder
@DCoder感谢您的评论,但我更喜欢使用“intervention”类而不是使用“GD”。 - Kiyarash
你尝试使用过circle函数吗?查看这个链接:http://image.intervention.io/api/circle - Mario Nassef
2个回答

6
我找到了一种方法,可以通过使用canvas并在main图像之前插入r1r2来实现。
$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');

结果如下所示。

enter image description here


谢谢您的回答... 这是个好技巧,但我需要单独对 r1.png 进行四舍五入... 有什么方法可以做到吗??? - Kiyarash
请再次查看我的问题...我已经添加了一条注释。 - Kiyarash

2

我自己没有尝试过,但可以使用Intervention类的mask方法来完成。您需要另一张白色圆角矩形带有黑色背景的图像作为掩模。

它应该像这样工作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接