使用干预图像和laravel 5.4的圆形图像角落

时间:2017-06-16 11:14:20

标签: php image laravel-5 laravel-5.4 intervention

我需要使用干预图像和laravel将一些图像插入另一个图像。

这是我的主要形象:

main image

这些是我要插入主图像的图像:

r1 image

r2 image

最后这张图片插入后:

final image sample

好吧,我使用这段代码来实现:

    $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

你知道我该怎么办?

提前致谢

注意:

感谢@Pascal Meunier,但

  

我需要单独围绕r1.png角,因为出于某些原因我必须再次将圆形图像保存在另一个地方...

2 个答案:

答案 0 :(得分:5)

我找到了一种方法,使用canvas并在r1图像之前插入r2main

$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

答案 1 :(得分:1)

我自己没有尝试过,但可以使用Intervention类中的mask method来完成。有了这个,你需要另一个白色圆角矩形图像,黑色背景为掩模。

它应该像这样工作:

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