Laravel 使用 intervention/image 扩展包,快速生成一个带二维码的海报

Laravel 使用 intervention/image 扩展包,快速生成一个带二维码的海报

准备:

  1. 安装 php 扩展:imagick参考链接
  2. 创建一个 laravel 项目。
  3. 安装 laravel 扩展 intervention/image
  4. 准备一张背景图片放置在 storage 文件夹下。
  5. 准备一张二维码图片放置在 storage 文件夹下。

安装命令:

  1. php 扩展安装
// PHP 安装扩展有一个固定的步骤。
1. 查看你的 php 已扩展列表:
php -m     // 看是否存在 imagick 这个扩展。
php -m | grep imagick  // 也可以管道这样查看,如果没有往下走。

1. 查看你项目使用的 php 版本:(比如常用的php版本命令)
php -v // 要注意这个命令是配置过环境变量的php命令,不代表你真实项目使用的 php 。
PHP 8.0.6 (cli) (built: May 14 2021 07:19:52) ( NTS )

2. 根据php版本下载对应可支持的扩展:
mac环境使用brew: 
brew install imagemagick

mac环境不用brew(3.7.0 可以满足我当前 php8.0的使用): 
http://pecl.php.net/package/imagick 下载 imagick-3.7.0.tar

win环境(3.7.0 可以满足我当前 php8.0的使用):
http://pecl.php.net/package/imagick 下载 php_imagick-3.7.0-8.0-nts-vs16-x64.zip

3. 解压扩展,扩展目录可以放置在你想要放置的任何目录:
mac: tar -xzvf imagick-3.7.0.tar
win: 直接zip解压就行

4. cd 到解压过的扩展文件夹中:
cd imagick-3.7.0

5. 通过 which 命令查看 php 的执行路径:
which phpize
/usr/local/opt/php@8.0/bin/phpize

6. 在扩展目录使用 phpize 命令:
/usr/local/opt/php@8.0/bin/phpize

7. 使用 phpconf 进行配置:
./configure --with-php-config=/usr/local/opt/php@8.0/bin/php-config

8. 安装:
make && make install

9. 检查:
make test

10. 增加对应 php.ini 文件的 extension 配置
php --ini //找到 php 配置文件(一定用你项目使用的 php 配置文件)。
/usr/local/etc/php/8.0/php.ini
extension=imagick.so

11. 关闭终端重新打开尝试 php -m 查看是否安装上 imagick 扩展。
  1. 安装 Laravel:
// 有项目了不用安装,没有了安装一个测试用。
composer create-project laravel/laravel example-app
  1. 安装 Laravel intervention/image 扩展
composer require intervention/image

文件:

  1. 背景图片:
    背景图片
  2. 二维码图片:
    草料二维码

代码:

<?php
namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;

class CreateQrcode extends Command
{

    // 执行的命令
    protected $signature = 'create:qrcode';

    public  function handle()
    {
        $this->handleMergeImage(storage_path('background.png'), storage_path('qrcode.png'));
        $this->info('执行完毕!');
    }

    /**
     * 合并二维码到背景图片处理
     * @param string $backgroundImg  背景图片链接
     * @param string $qrImg  二维码图片链接
     */
    public function handleMergeImage($backgroundImg = '', $qrImg = '')
    {
        // 图片文件不存在跳出。
        if (!is_file($backgroundImg) || !is_file($qrImg)) {
            return true;
        }

        // 1. Image::make($qrImg) 实例化二维码图片生成对象。
        // 2. resize(width, height) 调整二维码宽高, 去适应背景图片空白处大小。
        // 3. save($arImg); 保存二维码到原来路径(相当于覆盖文件), 路径自己配置。
        Image::make($qrImg)->resize(1300, 1300)->save($qrImg);

        // 进行图片的拼接
        // 1. Image::make($backgroundImg) 实例化背景图片生成对象。
        // 2. insert($qrImg, 'center', left, top) 将二维码放置背景图片中央 center,距离左边 0 像素,距离上部 450 像素,这些可根据背景图片真实大小是需要调整的。
        // 3. 将拼接后的图片保存到二维码路径(相当于覆盖文件), 当然路径可以自己修改。
        Image::make($backgroundImg)->insert($qrImg, 'center', 0, 450)->save($qrImg);
    }
}

执行命令:

php artisan create:qrcode
执行完毕!

合成图片:

Laravel 使用 intervention/image 扩展包,快速生成一个带二维码的海报

结束:

  1. 图片的路径必须真当前项目的绝对路径,不然会找不到图片。
  2. 背景图片的空白处可自己测量,来调整二维码的大小。
  3. 这个只是简单的单个海报的演示,真实业务可能要生成多张,循环可实现。
  4. 如果需要文字,进行添加到图片上。可参考Laravel的扩展文档:Intervention Image
本作品采用《CC 协议》,转载必须注明作者和本文链接
Xiao Peng
laravel_peng
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6
zhanghaidi

有没有更进阶的用法?

2年前 评论
laravel_peng (楼主) 2年前

加上文字排版就完美了。

2年前 评论
laravel_peng (楼主) 2年前

既然背景图片和二维码图片都是固定的,为什么不直接用PS把他俩合一起呢?这不是浪费资源么

1年前 评论
laravel_peng (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
技术员 @ 修炼的漱石
文章
10
粉丝
15
喜欢
93
收藏
171
排名:685
访问:1.1 万
私信
所有博文
社区赞助商