準備:
- 安裝 php 擴充套件:
imagick
。 參考連結 - 建立一個 laravel 專案。
- 安裝 laravel 擴充套件
intervention/image
- 準備一張背景圖片放置在 storage 資料夾下。
- 準備一張二維碼圖片放置在 storage 資料夾下。
安裝命令:
- 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 擴充套件。
- 安裝 Laravel:
// 有專案了不用安裝,沒有了安裝一個測試用。
composer create-project laravel/laravel example-app
- 安裝 Laravel
intervention/image
擴充套件
composer require intervention/image
檔案:
- 背景圖片:
- 二維碼圖片:
程式碼:
<?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
本作品採用《CC 協議》,轉載必須註明作者和本文連結