Advertisement

php生成海报,活码邀请推荐

阅读量:

目录

1.版本

2.安装扩展

3.生成海报

4.代码解释

5.附一个字体文件

6.参考文档


1.版本


  • php:7.2+ ,本示例使用的是7.3
  • endroid/qr-code :4.* ,本示例使用的是4.3
  • intervention/image:2.* ,本示例使用的是2.7
  • 使用前检查下是否启用了 gd2 扩展

2.安装扩展


composer require endroid/qr-code

composer require intervention/image

3.生成海报


复制代码
 <? php

    
  
    
 use Endroid\QrCode\QrCode;
    
 use Endroid\QrCode\Writer\PngWriter;
    
 use Endroid\QrCode\Encoding\Encoding;
    
 use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
    
 use Endroid\QrCode\Color\Color;
    
 use Endroid\QrCode\Logo\Logo;
    
 use Intervention\Image\ImageManager;
    
  
    
 // 背景图
    
 $backgroundImagePath = './uploads/qrcode/bg.png';
    
 // 二维码内容
    
 $qrCodeContent = 'https://www.example.com';
    
 // 合成后的图片保存路径
    
 $outputPath = 'uploads/qrcode/poster.png';
    
  
    
 $qrCode = QrCode::create($qrCodeContent)
    
     // 内容编码
    
     ->setEncoding(new Encoding('UTF-8'))
    
     // 内容区域大小
    
     ->setSize(260)
    
     // 内容区域外边距
    
     ->setMargin(10)
    
     // 内容圆形块尺寸模型
    
     ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
    
     // 内容颜色
    
     ->setForegroundColor(new Color(0, 0, 0))
    
     // 背景颜色
    
     ->setBackgroundColor(new Color(255, 255, 255));
    
  
    
 // 二维码logo
    
 $logo = 'logo.png';
    
 $logo = Logo::create($logo)->setResizeToWidth(50);
    
  
    
 // 生成二维码数据对象(后面两个参数都是可选的)
    
 $result = (new PngWriter)->write($qrCode, $logo);
    
  
    
 // 将二维码图片保存到本地服务器
    
 // $result->saveToFile($outputPath);
    
 // 或 file_put_contents($outputPath, $result->getString());
    
  
    
 // 返回 base64 格式的图片,这里的图片可以直接显示在接口工具中
    
 // $dataUri = $result->getDataUri();
    
 // echo "<img src='{$dataUri}'>";
    
  
    
 // 生成ImageManager对象
    
 $imageManager = new ImageManager(['driver' => 'gd']);
    
 // 创建二维码图像资源
    
 $qrCodeImage = $imageManager->make($result->getString());
    
 // 创建背景图资源
    
 $backgroundImage = $imageManager->make($backgroundImagePath)->resize(750, 1334);
    
  
    
 // 将文本写入图像 - 邀请码
    
 $text = '我的邀请码:362260';
    
 // $text:要写入图像的文本字符串
    
 // $x:文本左下角的 X 坐标
    
 // $y:文本左下角的 Y 坐标
    
 // $font:一个回调函数,用于设置文本的样式(可选)
    
 $backgroundImage - > text($text, 370, 1100, function($font) {
    
     // 使用字体文件
    
     $font->file(ROOT_PATH.'public/assets/fonts/YaHeiConsolasHybrid.ttf');
    
     // 设置字体大小
    
     $font->size(30);
    
     // 设置文本颜色
    
     $font->color('#333333');
    
     // 设置文本居中对齐
    
     $font->align('center');
    
     // 设置文本顶部对齐
    
     $font->valign('top');
    
     // 设置文本旋转()度
    
     $font->angle(0);
    
 });
    
  
    
 // 将二维码合成到背景图上
    
 $backgroundImage->insert($qrCodeImage, 'top-left', 230, 800);
    
  
    
 // 保存合成后的图片,还可以根据需求上传到云存储上面
    
 $backgroundImage->save($outputPath);
    
  
    
 var_export($outputPath);
    
    
    
    
    php
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/fb3S4RyhEcGTq2zHLm70CUFltg6V.png)

4.代码解释


这段代码是一个生成二维码并将其与背景图合成的示例。它使用了 Endroid\QrCode\QrCode 类来生成二维码,Endroid\QrCode\Writer\PngWriter 类来写入二维码到文件,以及 Intervention\Image\ImageManager 类来处理图像。

以下是代码的主要步骤:

背景图

复制代码
 * 指定背景图的路径 `$backgroundImagePath`。
 * 使用 `Intervention\Image\ImageManager` 创建一个 `ImageManager` 对象,并使用它的 `make` 方法加载背景图。
 * 使用 `resize` 方法调整背景图的大小为 750x1334。

二维码内容

复制代码
 * 指定二维码的内容 `$qrCodeContent`。
 * 使用 `QrCode::create` 方法创建一个二维码对象,并传入内容。
 * 设置二维码的编码方式为 UTF-8。
 * 设置二维码的大小为 260。
 * 设置二维码的外边距为 10。
 * 设置二维码的圆形块尺寸模型为 `RoundBlockSizeModeMargin`。
 * 设置二维码的前景色为黑色,背景色为白色。

二维码 logo

复制代码
 * 指定二维码 logo 的路径 `$logo`。
 * 使用 `Logo::create` 方法创建一个 logo 对象,并传入 logo 的路径。
 * 设置 logo 的宽度为 50。

生成二维码数据对象

复制代码
 * 使用 `new PngWriter` 创建一个 `PngWriter` 对象。
 * 使用 `write` 方法将二维码对象和 logo 对象写入到数据对象中。

将二维码图片保存到本地服务器

复制代码
 * 使用 `saveToFile` 方法将二维码数据对象保存到本地服务器的临时文件中。

返回 base64 格式的图片

复制代码
 * 使用 `getDataUri` 方法将二维码图片的 base64 格式返回。

保存二维码到临时文件

复制代码
 * 使用 `file_put_contents` 函数将二维码数据对象写入到临时文件中。

加载背景图和二维码图

复制代码
 * 使用 `ImageManager` 创建一个图像管理对象,并使用它的 `make` 方法加载背景图和二维码图。

将文本写入图像 - 邀请码

复制代码
 * 指定要写入图像的文本 `$text` 和文本的位置坐标。
 * 使用 `text` 方法将文本写入图像。

将二维码合成到背景图上

复制代码
 * 使用 `insert` 方法将二维码合成到背景图上,并指定合成的位置。

保存合成后的图片

复制代码
 * 使用 `save` 方法保存合成后的图片到指定路径 `$outputPath`。

删除临时文件

复制代码
 * 使用 `unlink` 函数删除临时文件。

输出合成后的图片路径

复制代码
 * 使用 `var_export` 函数输出合成后的图片路径。

请注意,此示例代码需要在服务器环境中,因为它涉及到文件操作。如果在本地环境中,可能需要适当修改文件路径和权限。此外,确保你的服务器环境支持 GDImagick 扩展,以便能够处理图像操作。

5.附一个字体文件


文件地址:YaHei-Consolas-Hybrid-1.12: YaHei Consolas Hybrid 字体

6.参考文档


全部评论 (0)

还没有任何评论哟~