備忘錄_20160105(定位)
修改
回首頁
程式 2024-08-22 15:46:44 1724312805 100
php 使用中文字型 example002 - 自動計算文字大小,產生圖片
php 使用中文字型 example002 - 自動計算文字大小,產生圖片
看範例
<?php
// 設定字體路徑(確保路徑正確)
$strFontPath = './NotoSansTC-Regular.ttf';
$strContent="這個是第一行\r\n來到第二行囉,帥吧!\r\n接下來是第三行!呵呵!許蓋功氷。";
$straContent=explode("\r\n", $strContent);
// 設定字體大小
$iFontSize = 20;
$fMaxWidth=0;
$fMaxHeight=0;
$iMarginBottom=6;
foreach($straContent as $iIndex => $strLine)
{
// 設置背景矩形的大小
$oTextBox=imagettfbbox($iFontSize, 0, $strFontPath, $strLine);
$fMinX=min(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6]));
$fMaxX=max(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6]));
$fMinY=min(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7]));
$fMaxY=max(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7]));
$fTextWidth = $fMaxX-$fMinX;
$fTextHeight = ($fMaxY-$fMinY)*1.5;
if($fTextWidth>$fMaxWidth) { $fMaxWidth=$fTextWidth; }
$fMaxHeight += $fTextHeight + $iMarginBottom;
}
// 創建一個真彩色的圖片
$oImage = imagecreatetruecolor($fMaxWidth, $fMaxHeight);
// 設定背景顏色為白色
$oBackgroundColor = imagecolorallocate($oImage, 255, 255, 255);
imagefill($oImage, 0, 0, $oBackgroundColor);
// 設定文字的初始位置
$fXLeft = 0;
$fYTop = 0;
// 定義不同段落的背景顏色
$oBackgroundColors = [
imagecolorallocate($oImage, 255, 228, 225), // 淡粉色
imagecolorallocate($oImage, 240, 255, 240), // 淡綠色
imagecolorallocate($oImage, 224, 255, 255) // 淡藍色
];
// 在圖片上繪製每行文字及其背景
foreach ($straContent as $iIndex => $strLine)
{
// 設置背景矩形的大小
$oTextBox = imagettfbbox($iFontSize, 0, $strFontPath, $strLine);
$fMinX=min(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6]));
$fMaxX=max(array($oTextBox[0],$oTextBox[2],$oTextBox[4],$oTextBox[6]));
$fMinY=min(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7]));
$fMaxY=max(array($oTextBox[1],$oTextBox[3],$oTextBox[5],$oTextBox[7]));
$fTextWidth = $fMaxX-$fMinX;
$fTextHeight = ($fMaxY-$fMinY)*1.5;
$fYTopBase=$fYTop+$fTextHeight*2/3;
// 繪製背景矩形
$oBGColor = $oBackgroundColors[$iIndex % count($oBackgroundColors)];
imagefilledrectangle($oImage, $fXLeft, $fYTop, $fXLeft+$fTextWidth, $fYTop+$fTextHeight, $oBGColor);
// 繪製文字
$oTextColor = imagecolorallocate($oImage, 0, 0, 0); // 黑色文字
imagettftext($oImage, $iFontSize, 0, $fXLeft, $fYTopBase, $oTextColor, $strFontPath, $strLine);
$fYTop+=$fTextHeight+$iMarginBottom; // 調整行距
}
// 設定 header,顯示圖片
header('Content-Type: image/png');
// 輸出圖片
imagepng($oImage);
// 釋放記憶體
imagedestroy($oImage);
?>