Laravel 使用 intervention/image 擴充套件包,快速生成一個帶二維碼的海報

laravel_peng發表於2022-03-25

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=redis
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

相關文章