# 生成海报 * * * * * 生成海报之前需要准备二维码和海报背景图。 二维码可参考上面的章节生成,并将路径保存到相应的数据表中。 海报可以根据实际情况处理,可以是静态固定的背景图片也可以是设置上传的背景图。 此处为演示方面暂时用静态图片演示海报生成功能。 上层代码如下 ``` /** * 生成海报 */ public function demoPoster() { // windows $poster_data = create_poster( "D:/xampp/htdocs/OneBase/public/upload/extend/qrcode/e9ff27b4d969cfad54b5388c381e2022.png", "D:/xampp/htdocs/OneBase/public/upload/extend/poster/poster_bg.jpg", 200, [200,100] ); // linux /* $poster_data = create_poster( "./upload/extend/qrcode/e9ff27b4d969cfad54b5388c381e2022.png", "./upload/extend/poster/poster_bg.jpg", 200, [200,100] ); */ dump($poster_data); } ``` 海报生成函数如下 函数所在文件(app/extend.php) ``` /** * 生成海报 * @param staring $qrcode_path 海报二维码图片路径 * @param staring $poster_bg_path 海报背景图片路径 * @param int $qrcode_size 二维码大小 * @param array $location 二维码位置,数组中包含2个值,分别代表x y距离,通过此参数调整二维码在海报中的位置 */ function create_poster($qrcode_path = '', $poster_bg_path = '', $qrcode_size = 200, $location = [0,0]) { // 海报目录路径 $poster_path = './upload/extend/poster/'; // 将二维码生成缩略图 if (file_exists($qrcode_path) && file_exists($poster_bg_path)) { $qrcode_tmp_file = md5($qrcode_path).'_qrcode.jpg'; $qrcode_tmp_file_path = $poster_path . $qrcode_tmp_file; $image_thumb = \think\Image::open($qrcode_path); $image_thumb->thumb($qrcode_size, $qrcode_size,\think\Image::THUMB_SCALING)->save($qrcode_tmp_file_path); $poster_file_name = md5($qrcode_path).'_poster.jpg'; $poster_file_path = $poster_path .$poster_file_name; $image_water = \think\Image::open($poster_bg_path); $image_water->water($qrcode_tmp_file_path, $location)->save($poster_file_path); @unlink($qrcode_tmp_file_path); $return_data['name'] = $poster_file_name; $return_data['path'] = $poster_file_path; return $return_data; } else { return false; } } ``` 执行结果返回了海报的文件名称和保存的路径 ``` array(2) { ["name"] => string(43) "847cc36b83d8c1fe3f97db5953e9fc46_poster.jpg" ["path"] => string(66) "./upload/extend/poster/847cc36b83d8c1fe3f97db5953e9fc46_poster.jpg" } ``` 效果图 ![](https://img.kancloud.cn/23/5b/235bf8aa2fe1d0e64b852cd05bc1526e_650x866.jpg) create_poster函数仅演示海报生成,若满足不了需求,比如您需要在海报中写入会员昵称。 可修改create_poster函数,调用$image->text()方法将文字写入海报。