【PHP】生成二维码海报
目录
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
类来处理图像。以下是代码的主要步骤:
背景图
指定背景图的路径
$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.参考文档
猜你喜欢
- 【PHP】PHP实现图片验证码的生成和验证
- PHP实现图片验证码的生成和验证在网站开发中,为了防止机器恶意攻击或者自动注册,我们经常会使用图片验证码来进行验证。本文将介绍如何使用PHP来生成和验证图片验证码,并给出具体的代码示例。生成图片验证码生成图片验证码的关键是生成随机的验证码字符串,并将其绘制到图片上。以下是一个生成图片验证码的示例代码:<?php session_start(); // 声明图片尺寸 $image_width = 100; $image_height&nb
- 【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作为一种流行的编程语言,具有强大
- 【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中,有许多可以用于字
- 【PHP】php删除数组中的重复值
- 随着互联网技术的快速发展,各种编程语言也在不断更新和发展。其中,PHP作为一门开发Web应用程序的强大语言,受到了广泛的关注和使用。在PHP编程中,数组是非常常用的数据类型之一,而处理数组中重复值的问题也是PHP开发人员经常遇到的问题之一。本文将介绍PHP中删除数组中重复值的方法。方法一:array_uniquePHP提供了一个内置函数array_unique(),可以用来删除数组中的重复值。array_unique()函数将返回一个新数组,该数组包含输入数组中所有的唯一值。使用arr
- 【PHP】php使用curl常见出错
- hp是一款广泛应用于服务器端开发的编程语言。在常见的web应用程序中,php常使用curl库实现http请求,主要用于与其他web服务进行通信。然而,在使用curl时,开发人员可能会遇到各种问题,其中最常见的问题是curl在发送请求时出错。cURL错误通常会导致请求无法正常发送或无法成功获取响应。本文将介绍cURL的常见错误以及如何解决这些问题。一、未安装cURL扩展在使用cURL前,首先需要在PHP中安装cURL扩展,否则cURL库将无法正常工作,在发送请求时会抛出错误。要检查PHP是否已经
- 【PHP】ThinkPHP 资源路由的简单使用,restfull风格API
- 一、资源控制器资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用:php think make:controller index@TestR # php think make:controller 应用名@资源控制名或者使用完整的命名空间生成php think make:controller app\index\c
- 【PHP】interface接口、abstract抽象类、trait转载合并
- 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类。 2 .抽象类不能被直接实例化。抽象类中只定义(或部分实现)子类需要的方法。子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化。
- 【PHP】PHP 框架中大型项目代码维护挑战与解决方法
- 在大型 php 项目中,代码维护面临主要挑战,包括依赖管理、代码重构、代码风格和文档。解决方法包括:使用依赖项管理器管理版本冲突。使用unittest框架在重构时保持代码完整性。建立并强制执行代码风格指南。建立文档策略并使用phpdoc生成文档。PHP 框架中大型项目代码维护挑战与解决方法在大型 PHP 项目中,代码维护可能是一个艰巨的任务。随着项目规模的增长,代码库会变得庞大且复杂,从而难以管理和更新。以下是 PHP 框架中代码维护面临的主要挑战以及解决这些挑战的一些方法:挑战 1:依赖管理依
- 【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 或 composer update --ignore-platform-reqs