PHP使用GD庫在圖片上編寫自定義文字(代碼可直接複製使用)
一、準備工作
- 準備一張背景圖片(.jpg、.png、.gif任意格式即可);
- 準備一個字體文件(.ttf格式),如果你只是想在背景圖片寫入純英文字符串則可以忽略此步驟。
二、基礎代碼展示
/**
* 使用GD庫在圖片上寫文字
*/
public function createImage()
{
//header('Content-Type: image/png');#如果你先在瀏覽器上展示圖片的合成好的圖片請打開此註釋。
$img = $back = 'space/backgroundImage.png';//背景圖本地路徑
$str = '我被打印在圖片上拉';//需要打印在背景圖上的文字
$text = preg_split('/(?<!^)(?!$)/u', $str);//將文字拆分爲數組(中文,需要字體庫才能正常顯示,若字體庫引入錯誤或當前使用的字體庫本身就不支持中文,最後生成圖片後都將無法顯示你打印出的中文)注意:字符串需要是UTF-8 編碼的文本字符串。
$code = preg_split('/(?<!^)(?!$)/u', 'IM-1592797913-7EBC0DF3-872B');//將值拆分爲數組(英文,英文無需字體庫即可直接打印在背景圖上。)注意:字符串需要是UTF-8 編碼的文本字符串。
$size = 20;//字體大小
$font = "./font/msyh.ttf";//加載字體ttf(換成你自己的字體庫路徑)
$img = imagecreatefrompng($img);// 加載背景圖
#imagecolorallocate(參數A:背景圖的路徑,參數B:RGB顏色參數1,參數C:RGB顏色參數2,參數D:RGB顏色參數3)
#藍色的RGB值爲:(24, 165, 234)
$color = imagecolorallocate($img, 24, 165, 234);//設置字體顏色,給你想打印在圖片上的文字設置一個你喜歡的字體顏色
$x = 0;//首個字的x軸橫座標
$y = 30;//首個字的y軸縱座標
//將指定中文字符寫在背景圖片上
foreach ($text as $k => $v) {
#imagettftext(參數A:背景圖路徑,參數B:字體大小,參數C:文字角度0標識從左到右讀的文本,參數D:首個文字在背景圖上的橫座標,參數E:首個文字在背景圖上的縱座標,參數F:文字的顏色值,參數G:字體庫路徑,參數H:需要寫在圖上的文字,)
imagettftext($img, $size, 0, $x, $y, $color, $font, $v);//在背景圖上循環添加文字
$x = $x + 50;//增加橫座標來做到間距的效果,沒有這個參數打印出來的字會重疊在一起!
}
//將指定英文字符寫在背景圖片上
$x1 = 0;
$y1 = 60;
foreach ($code as $k => $v) {
imagettftext($img, 20, 0, $x1, $y1, $color, $font, $v);//循環添加文字
$x1 = $x1 + 30;//增加橫座標來做到間距的效果
}
$fileName = rand(111, 222) . time() . ".png";//定義圖片名
print_r('https://xcx.xxx.com/test/' . $fileName);
#imagepng() 注意這個函數,我的背景圖是.png格式且我最後想的到的也是.png格式的圖,所以
#我使用這個函數,如果你想要其他格式的圖片你還可以參見 imagegif(),imagejpeg()等
$url = imagepng($img, "test/" . $fileName);//保存生成好的圖片到本地
//拓展:圖片的旋轉
$img2 = imagecreatefrompng('test/' . $fileName);// 加載已有圖像
$rotate = imagerotate($img2, 90, 0);
imagepng($rotate, 'test/' . mt_rand(333, 555) . 'rotate.png');//保存生成好的圖片到本地
print_r([$rotate, $url]);
}