備忘錄_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);
?>