您的当前位置:首页>全部文章>文章详情

【PHP】生成二维码海报

CrazyPanda发表于:2023-12-02 23:24:45浏览:766次TAG:

目录

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

4.代码解释


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

 

以下是代码的主要步骤:

 
  1. 背景图

    • 指定背景图的路径 $backgroundImagePath

    • 使用 Intervention\Image\ImageManager 创建一个 ImageManager 对象,并使用它的 make 方法加载背景图。

    • 使用 resize 方法调整背景图的大小为 750x1334。

  2. 二维码内容

    • 指定二维码的内容 $qrCodeContent

    • 使用 QrCode::create 方法创建一个二维码对象,并传入内容。

    • 设置二维码的编码方式为 UTF-8。

    • 设置二维码的大小为 260。

    • 设置二维码的外边距为 10。

    • 设置二维码的圆形块尺寸模型为 RoundBlockSizeModeMargin

    • 设置二维码的前景色为黑色,背景色为白色。

  3. 二维码 logo

    • 指定二维码 logo 的路径 $logo

    • 使用 Logo::create 方法创建一个 logo 对象,并传入 logo 的路径。

    • 设置 logo 的宽度为 50。

  4. 生成二维码数据对象

    • 使用 new PngWriter 创建一个 PngWriter 对象。

    • 使用 write 方法将二维码对象和 logo 对象写入到数据对象中。

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

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

  6. 返回 base64 格式的图片

    • 使用 getDataUri 方法将二维码图片的 base64 格式返回。

  7. 保存二维码到临时文件

    • 使用 file_put_contents 函数将二维码数据对象写入到临时文件中。

  8. 加载背景图和二维码图

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

  9. 将文本写入图像 - 邀请码

    • 指定要写入图像的文本 $text 和文本的位置坐标。

    • 使用 text 方法将文本写入图像。

  10. 将二维码合成到背景图上

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

  11. 保存合成后的图片

    • 使用 save 方法保存合成后的图片到指定路径 $outputPath

  12. 删除临时文件

    • 使用 unlink 函数删除临时文件。

  13. 输出合成后的图片路径

    • 使用 var_export 函数输出合成后的图片路径。

 

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

5.附一个字体文件 


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

6.参考文档


猜你喜欢

【PHP】PHP实现图片验证码的生成和验证
PHP实现图片验证码的生成和验证在网站开发中,为了防止机器恶意攻击或者自动注册,我们经常会使用图片验证码来进行验证。本文将介绍如何使用PHP来生成和验证图片验证码,并给出具体的代码示例。生成图片验证码生成图片验证码的关键是生成随机的验证码字符串,并将其绘制到图片上。以下是一个生成图片验证码的示例代码:&lt;?php session_start(); &nbsp; //&nbsp;声明图片尺寸 $image_width&nbsp;=&nbsp;100; $image_height&amp;nb
发表于:2023-12-28 浏览:288 TAG:
【PHP】php有哪些爬虫模块类型
hp爬虫模块类型有cURL、Simple HTML DOM、Goutte、PhantomJS、Selenium等等。详细介绍:1、cURL,可以模拟浏览器行为轻松地获取网页内容;2、Simple HTML DOM,可以通过CSS选择器或XPath表达式来定位和提取HTML元素,方便地从网页中提取所需的数据;3、Goutte可以发送HTTP请求、处理Cookie、处理表单等等。本教程操作系统:Windows10系统、PHP8.1.3版本、Dell G3电脑。PHP作为一种流行的编程语言,具有强大
发表于:2023-12-04 浏览:628 TAG:
【PHP】7个php字符串处理函数有哪些
7个php字符串处理函数有strlen()、strpos()、substr()、str_replace()、strtolower()、strtoupper()、trim()等。详细介绍:1、strlen(),用于获取字符串的长度;2、strpos(),用于查找字符串中的特定子串,返回第一次出现位置;3、substr(),用于获取字符串的子串;4、str_replace()等等。本教程操作系统:Windows10系统、PHP8.1.3版本、Dell G3电脑。在PHP中,有许多可以用于字
发表于:2023-12-04 浏览:684 TAG:
【PHP】php删除数组中的重复值
随着互联网技术的快速发展,各种编程语言也在不断更新和发展。其中,PHP作为一门开发Web应用程序的强大语言,受到了广泛的关注和使用。在PHP编程中,数组是非常常用的数据类型之一,而处理数组中重复值的问题也是PHP开发人员经常遇到的问题之一。本文将介绍PHP中删除数组中重复值的方法。方法一:array_uniquePHP提供了一个内置函数array_unique(),可以用来删除数组中的重复值。array_unique()函数将返回一个新数组,该数组包含输入数组中所有的唯一值。使用arr
发表于:2023-12-19 浏览:316 TAG:
【PHP】php使用curl常见出错
hp是一款广泛应用于服务器端开发的编程语言。在常见的web应用程序中,php常使用curl库实现http请求,主要用于与其他web服务进行通信。然而,在使用curl时,开发人员可能会遇到各种问题,其中最常见的问题是curl在发送请求时出错。cURL错误通常会导致请求无法正常发送或无法成功获取响应。本文将介绍cURL的常见错误以及如何解决这些问题。一、未安装cURL扩展在使用cURL前,首先需要在PHP中安装cURL扩展,否则cURL库将无法正常工作,在发送请求时会抛出错误。要检查PHP是否已经
发表于:2024-03-19 浏览:296 TAG:
【PHP】ThinkPHP 资源路由的简单使用,restfull风格API
一、资源控制器资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用:php&nbsp;think&nbsp;make:controller&nbsp;index@TestR #&nbsp;php&nbsp;think&nbsp;make:controller&nbsp;应用名@资源控制名或者使用完整的命名空间生成php&nbsp;think&nbsp;make:controller&nbsp;app\index\c
发表于:2024-05-24 浏览:249 TAG:
【PHP】interface接口、abstract抽象类、trait转载合并
1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类。 2 .抽象类不能被直接实例化。抽象类中只定义(或部分实现)子类需要的方法。子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化。
发表于:2025-03-21 浏览:40 TAG: #php
【PHP】PHP 框架中大型项目代码维护挑战与解决方法
在大型 php 项目中,代码维护面临主要挑战,包括依赖管理、代码重构、代码风格和文档。解决方法包括:使用依赖项管理器管理版本冲突。使用unittest框架在重构时保持代码完整性。建立并强制执行代码风格指南。建立文档策略并使用phpdoc生成文档。PHP 框架中大型项目代码维护挑战与解决方法在大型 PHP 项目中,代码维护可能是一个艰巨的任务。随着项目规模的增长,代码库会变得庞大且复杂,从而难以管理和更新。以下是 PHP 框架中代码维护面临的主要挑战以及解决这些挑战的一些方法:挑战 1:依赖管理依
发表于:2024-05-30 浏览:272 TAG:
【PHP】Your requirements could not be resolved to an installable set of packages.
在执行composer install或composer update的时候,出现Your requirements could not be resolved to an installable set of packages.这个错误,提示的是版本不兼容的问题执行一下命令即可composer install --ignore-platform-reqs 或&nbsp;composer update --ignore-platform-reqs
发表于:2024-08-09 浏览:312 TAG:
【PHP】生成二维码海报
目录1.版本2.安装扩展3.生成海报4.代码解释5.附一个字体文件&nbsp;6.参考文档1.版本php:7.2+ ,本示例使用的是7.3endroid/qr-code :4.* ,本示例使用的是4.3intervention/image:2.* ,本示例使用的是2.7使用前检查下是否启用了 gd2 扩展2.安装扩展composer require endroid/qr-codecomposer require intervention/image3.生成海报&lt;?&nbsp;php &amp;nb
发表于:2023-12-02 浏览:767 TAG: