效果
实现
首先,我们要拿到图片的原图,然后把需要动态替换的位置弄成空背景。
安装下我们需要用到的依赖库,特别好用,文档也很详细。
1
| $ composer require intervention/image
|
创建一个控制器然后开始我们的操作了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
namespace App\Http\Controllers;
use Intervention\Image\ImageManagerStatic as Image;
class IndexControlle extends Controller { public function index() { $default_image_path = storage_path('default.png');
$default_image = Image::make($default_image_path); } }
|
我们需要准备好第一个来替换的图片(这是我老婆王冰冰)。
替换前我们要知道图片替换的具体位置和图片的一个大小,为了方便截图我们生成到了蓝湖。
图片距离上方 53 像素,距离左边 25 像素,大小是 700*900 像素。
知道了图片参数那就开始进行替换处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $cover_image_path = storage_path('cover.png');
$cover_image = Image::make($cover_image_path)->resize(700, 900);
$default_image->insert($cover_image, 'top-left', 25, 53);
$save_path = storage_path('save.png');
$default_image->save($save_path);
|
这是生成的结果图片,可以看出我们预留的透明背景是有圆角的,然后这里变成了直角,图片有部分没有被切掉。其实处理起来很方便,在保存前多覆盖一层背景就可以了。
1 2 3 4 5 6 7 8
| $default_image->insert($default_image_path, 'top-left', 0, 0);
$save_path = storage_path('save.png');
$default_image->save($save_path);
|
可以看到图片现在就是圆角了的,接下来制作头像部分。
用的这个图片处理库真的很方便,比如我们插入图片可以选择计算的位置,头像我们插入位置从 bottom-right
开始。
1 2 3 4 5
| $avatar_image_path = storage_path('avatar.png');
$avatar_image = Image::make($avatar_image_path)->resize(260, 260);
$default_image->insert($avatar_image, 'bottom-right', 43, 41);
|
这样子我们的程序就算完成了。
其实最开始的时候我们可以不先实例化那个背景图像,可以先创建一个空的图像(我们是已知图片大小了的),最后保存前在添加背景图像上去。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $default_image = Image::canvas(750, 1334);
$cover_image_path = storage_path('cover.png');
$cover_image = Image::make($cover_image_path)->resize(700, 900);
$default_image->insert($cover_image, 'top-left', 25, 53);
$avatar_image_path = storage_path('avatar.png');
$avatar_image = Image::make($avatar_image_path)->resize(260, 260);
$default_image->insert($avatar_image, 'bottom-right', 43, 41);
$default_image_path = storage_path('default.png');
$default_image->insert($default_image_path, 'top-left', 0, 0);
$save_path = storage_path('save.png');
$default_image->save($save_path);
|