php - 載入文字轉成圖片
Table of Contents
#
需求
讀取一段文字後
可以決定字型
最後要轉成圖片
#
使用的工具
-
php7.2
-
freetype
提前說明需要用到 GD(這通常預設就啟動了)
freetype 通常會需要另外安裝
如何先檢查有沒有 GD 和 freetype
先用 phpinfo 檢查即可
-> % php -a
Interactive shell
php >
之後再打
echo phpinfo();
就會 output 資訊了
在搜尋 gd
gd
GD Support => enabled
GD Version => bundled (2.1.0 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => 9 compatible
PNG Support => enabled
libPNG Version => 1.6.32
WBMP Support => enabled
XBM Support => enabled
有安裝過 freetype 的話
就會一起顯示 FreeType Support
gd
GD Support => enabled
GD Version => bundled (2.1.0 compatible)
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.10.1
GIF Read Support => enabled
GIF Create Support => enabled
JPEG Support => enabled
libJPEG Version => 9 compatible
PNG Support => enabled
libPNG Version => 1.6.37
WBMP Support => enabled
XBM Support => enabled
WebP Support => enabled
目前環境是 Mac OSX 10.14.6
安裝 freetype 的方式大致上有三種
-
重新編譯 PHP
-
brew 安裝新的 PHP
因為剛好之前是用 Mac 自帶的 PHP 來用(PHP 7.1.23)
就順便用 brew 安裝 PHP 7.2 也順便改成用 brew 安裝的 PHP 7.2 當之後本地端的開發
brew 安裝完後其實就也一起裝好 freetype 了
這裡額外提一下自己其實有部分的開發都用 docker 開發了, 因為 PHP 版本不一(升級成本太高了, 且 PHP 不是開發主力) 所以就用 docker 封裝管理不同的服務
所以得注意一下 PHP 語法和 extension 的支援
#
Code
先使用 imagettftext
需要再使用 imagepng
來輸出成圖片
以下為簡單的範例
// 先建立一個畫布
$im = imagecreatetruecolor(1400, 320);
// 建立顏色
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
// 建立一個塗滿背景的區域
imagefilledrectangle($im, 0, 0, 1400, 320, $white);
// 文字
$text = '中文繁體 text';
// 字型
$font = 'NotoSansTC-Regular.otf';
// 輸出的檔案
$file = 'font.png';
// 添加文字到圖片中
imagettftext($im, 112, 0, 10, 160, $black, $font, $text);
// 輸出成 PNG
imagepng($im, $file, 9);
當然要輸出成其他圖片格式 PHP 也有 imagejpeg
等 function 可以使用