上一篇內容已經寫好了生成帶二維碼的海報,只不過海報背景圖和二維碼都是已經存在的。一般業務中二維碼一般是動態生成的,二維碼的生成可以通過一些擴充套件來實現,這裡不再贅述。
這一篇我們專門來說,怎麼在海報上增加新的內容,比如說:<文字資訊>
首先來介紹文字
文字本身都有哪些屬性呢?例如:
- 文字的字型。
- 文字的大小。
- 文字的顏色。
文字相對於圖片的有哪些屬性呢?例如:
- 文字的內容。
- 文字的排版。
- 文字相對圖片的位置。
其次根據上面的介紹來寫對應的程式碼
設定文字的字型:從 可以使用的字型庫 下載下來,將檔名修改為英文名字。
// 獲取字型 .ttf 檔案。 $fontPath = storage_path('font/shoujinti.TTF');
使用新增文字的方法:文件地址 Image::text
例項化圖片物件
$img = Image::make('public/foo.jpg');
呼叫例項化物件的 text 方法。
// 使用回撥函式定義詳細內容 $textConent = "五花馬千金裘,呼兒將出換美酒!!"; $img->text($textConent, 400, 120, function($font) { // 設定字型檔案 $font->file(storage_path('font/shoujinti.ttf')); // 設定寫入文字的顏色 $font->color('#FFB400'); // 16進位制顏色,字母需大寫。 $font->color([255, 0, 0, 1]); // 也可以 RGB 顏色。 // 設定字型水平位置 - 設定相對於給定基點的水平文字對齊方式。 // 有三個值可選,left、center、right,預設是 left $font->align('left'); // 用的不多,也不好用 // 設定字型垂直位置 - 設定相對於給定基點的垂直文字對齊方式。 // 有三個值可選,top、middle、buttom,預設是 buttom $font->valign('buttom'); // 用的不多,也不好用 // 旋轉字型 - 以度為單位設定文字的旋轉角度。文字將圍繞垂直和水平對齊點逆時針旋轉。 $font->angle(5); })
最終的程式碼。
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Intervention\Image\Facades\Image; class createPoster extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'create:poster'; /** * The console command description. * * @var string */ protected $description = '建立海報'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * 處理方法 * * @return void */ 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; } // 生成隨機字串 $qrRandomStr = Str::random(11); Storage::makeDirectory('qrcode'); $qrcodeFileName = storage_path('app/public') . '/qrcode/' . $qrRandomStr . '.png'; $posterRandomStr = Str::random(11); Storage::makeDirectory('poster'); $posterFileName = storage_path('app/public') . '/poster/' . $posterRandomStr . '.png'; // 1. Image::make($qrImg) 例項化二維碼圖片生成物件。 // 2. resize(width, height) 調整二維碼寬高, 去適應背景圖片空白處大小。 // 3. save($arImg); 儲存二維碼到原來路徑(相當於覆蓋檔案), 路徑自己配置。 Image::make($qrImg)->resize(900, 900)->save($qrcodeFileName); // 進行圖片的拼接 // 1. Image::make($backgroundImg) 例項化背景圖片生成物件。 // 2. insert($qrImg, 'center', left, top) 將二維碼放置背景圖片中央 center,距離左邊 0 畫素,距離上部 450 畫素,這些可根據背景圖片真實大小是需要調整的。 // 3. 將拼接後的圖片儲存到二維碼路徑(相當於覆蓋檔案), 當然路徑可以自己修改。 $image = Image::make($backgroundImg)->insert($qrcodeFileName, 'center', 0, 450); // 獲取字型檔案地址,檔案地址須使用絕對地址 - 字型檔案使用英文命名 $fontPath = storage_path('thin.ttf'); $image->text('五花馬千金裘,呼兒將出換美酒!', 400, 120, function ($font) use ($fontPath) { $font->file($fontPath); // 字型檔案地址 $font->size(60); // 字型大小 $font->color('#FFB400'); // $font->color([255, 0, 0, 1]); $font->align('left'); $font->valign('bottom'); $font->angle(5); }); // 將檔案儲存 $image->save($posterFileName); } }
本作品採用《CC 協議》,轉載必須註明作者和本文連結