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

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` 函数输出合成后的图片路径。
请注意,此示例代码需要在服务器环境中,因为它涉及到文件操作。如果在本地环境中,可能需要适当修改文件路径和权限。此外,确保你的服务器环境支持
GD或Imagick扩展,以便能够处理图像操作。
5.附一个字体文件
文件地址:YaHei-Consolas-Hybrid-1.12: YaHei Consolas Hybrid 字体
6.参考文档
全部评论 (0)
还没有任何评论哟~
