2016年2月29日 星期一

JavaScript Form Validation



HTML Form Example

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
Name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>

function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == null || x == "") {
        alert("Name must be filled out");
        return false;
    }
}

Reference : http://www.w3schools.com/js/js_validation.asp

2016年2月26日 星期五

整合smilepay 的筆記 -> 獲得繳費紀錄





實例:
為了方便了解各參數的帶法,以下列實例是以網址列方式作範例,實際撰寫時不建議以此方式。
https://ssl.smse.com.tw/api/SPPayment.asp?Rvg2c=1&Dcvc=5240&Od_sob=123456&Amount=500&Pur_name=王大明&Tel_number=037376006&Mobile_number=0961238006&Address=苗栗市莊敬街95號&Email=service@smse.com.tw&Invoice_name=訊航科技股份有限公司&Invoice_num=80129529&Remark=備註&Roturl=http://www.test.com/test.asp&Pay_gdry=TW&Pay_zg=2
&Verify_key=19FF9E6EBB0D7CCC3C34AC8482AFFFA8

解析XML資料
實例:
<SmilePay>
   <Status>1</Status>
   <Desc>Succeeded</Desc>

   <
Rvg2c>1</Rvg2c>
   <Dcvc>
5240</Dcvc>
   <SmilePayNO>00E0001000002913643</SmilePayNO>
   <Data_id><Data_id/>
   <Amount>500</Amount>
   <AtmBankNo>004</AtmBankNo>
   <AtmNo>31905792913643</AtmNo>
</SmilePay>

Xml Tag說明 (請注意大小寫)
Tag說明長度備註
Status取號狀態5參閱狀態表
Desc描述 參閱狀態表內容欄
Dcvc商家代號  
SmilePayNOSmilePay追蹤碼50查詢時使用
Data_id商家訂單編號  
Amount金額  
PayEndDate繳款截止期限 2013/10/8 23:59:00限超商帳單及 ibon、LifeET、
FaniPort 、虛擬帳號有效
AtmBankNo銀行代號3Pay_zg =2秀出
AtmNo虛擬帳號14Pay_zg =2秀出
Barcode1條碼19Pay_zg =3秀出
Barcode2條碼216Pay_zg =3秀出
Barcode3條碼315Pay_zg =3秀出
IbonNoIbon繳費代碼20Pay_zg =4秀出
FamiNO全家繳費代碼14Pay_zg =6秀出
Status 狀態表說明 (請注意大小寫)
狀態碼內容備註
1Succeeded取號成功
-2001Dcvc or Rvg2c Error無參數碼及商家代號錯誤
-2002Verify_key is Error檢查碼錯誤
-2003Pay_zg Error無付款模式
-2004Deadline_date or Deadline_time Error日期格式錯誤
-2005Amount is empty無交易金額
-2006711 C2C Item error7-11超商取貨付款相關參數錯誤
-3001Dcvc Fail無此商家代號
-3002The Dcvc number is offline商家使用期限已到期
-3003Can not use this Pay_zg service(Store)商家未開啟此付款方式
-3004Amount Fail超過付款模式設定金額
-3005Can not use this Pay_zg service(SmilePay)SmielPay關閉此付款方式
-4000Atm Payment Fail此銀行不提供ATM帳號
-4001Get ibon,famiport Fail超商代碼取號錯誤
-4002Smse service Fail簡訊服務忙錄
-4003Ibon service Failibon 服務忙錄
-4004Famiport service FillFami 服務忙錄
-4005Smse balance Fail簡訊餘額不足
-5000Smse service FailSmse 執行錯誤
-5001Ibon service Failibon 執行錯誤
-5002Famiport service Failfami 執行錯誤
-5003711 C2C service Fail7-11超商取貨付款 執行錯誤
-6001Payment errorPayment error

以下是範例

<?php
include("../config.inc.php");
include($_SiteGLOBAL['Include_ROOT']."/db_connect.inc.php");

//  先從database 查詢

//step 0. SELECT FROM 方案 查出Amount金額和Od_sob方案名稱
$sql="SELECT id,name,price,isDel,case_type,total_cost,cost_per_unit,game_type FROM {$_SiteGLOBAL['dbtable']}.buyCase WHERE id='{$_POST["buyCase_id"]}' LIMIT 1";
$result=db_query($connect,$sql);
list($buyCaseID,$buyCaseName,$buyCasePrice,$isDel,$case_type,$total_cost,$cost_per_unit,$game_type)=db_fetch_row($result);
if($isDel==1 || empty($buyCaseID) || empty($_SESSION['user_id'])){
echo <<<EOF
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script><!--
top.location.replace("/order.php");
//--></script>
EOF;
exit;
}

$_REQUEST['Dcvc']="3582";   // 商家代號
$_REQUEST['Rvg2c']="1";       //
$_REQUEST['Verify_key']="516E4C2B00A6B8F5DBB1817ADDA8D54C"; // 檢查碼

$_REQUEST['Pay_gdry']="TW"; //
$_REQUEST['Roturl']="http://{$_SiteGLOBAL["DOMAIN"]}/pay/Roturl.php"; // 交易完成後要回送的位置
$_REQUEST['Data_id']=substr($_SiteGLOBAL["DOMAIN"],0,2).time(); // 訂單號碼

$_REQUEST['Pur_name']=$_POST["Pur_name"]; // 購買人姓名
$_REQUEST['Mobile_number']=$_POST["Mobile_number"]; // 聯絡電話
$_REQUEST['Email']=$_POST["Email"]; // 電子信箱
$_REQUEST['Pay_zg']=$_POST["Pay_zg"]; // 收費模式
if($_REQUEST['Pay_zg']=="44"){
$Pay_zg=4;
}else{
$Pay_zg=$_REQUEST['Pay_zg'];
}

$_REQUEST['Od_sob']=$buyCaseName; // 消費項目
$_REQUEST['Amount']=$buyCasePrice;  // 應付費金額
$_REQUEST['Remark']="case_type=".$case_type."&total_cost=".$total_cost."&cost_per_unit=".$cost_per_unit."&game_type=".$game_type; // 備註

//讀取傳送內容
$postData = "Dcvc=".$_REQUEST['Dcvc'];
$postData = $postData . "&Rvg2c=".$_REQUEST['Rvg2c'];
$postData = $postData . "&Verify_key=".$_REQUEST['Verify_key'];
$postData = $postData . "&Od_sob=".$_REQUEST['Od_sob'];
$postData = $postData . "&Pay_zg=".$Pay_zg;
$postData = $postData . "&Data_id=".$_REQUEST['Data_id'];
$postData = $postData . "&Deadline_date=".$_REQUEST['Deadline_date'];//非必填
$postData = $postData . "&Deadline_time=".$_REQUEST['Deadline_time'];//非必填
$postData = $postData . "&Amount=".$_REQUEST['Amount'];
$postData = $postData . "&Pur_name=".$_REQUEST['Pur_name'];
$postData = $postData . "&Tel_number=".$_REQUEST['Tel_number'];//非必填
$postData = $postData . "&Mobile_number=".$_REQUEST['Mobile_number'];
$postData = $postData . "&Address=".$_REQUEST['Address'];//非必填
$postData = $postData . "&Email=".$_REQUEST['Email'];
$postData = $postData . "&Remark=".$_REQUEST['Remark'];
$postData = $postData . "&Invoice_name=".$_REQUEST['Invoice_name'];//非必填
$postData = $postData . "&Invoice_num=".$_REQUEST['Invoice_num'];//非必填
$postData = $postData . "&Roturl=".$_REQUEST['Roturl'];

//執行取號動作
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://ssl.smse.com.tw/api/SPPayment.asp");
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$string = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($string);

if($xml->Status=="1"){
//取號成功
$sql="INSERT INTO {$_SiteGLOBAL['dbtable']}.smilepay_record(Data_id, Dcvc, Rvg2c, Verify_key, Od_sob, Pay_zg, buyCase_id, Amount, user_id, Pur_name, Mobile_number, Email, Roturl, Pay_gdry, pay_info_json,Remark,points,createtime) VALUES ('".db_escape($_REQUEST['Data_id'])."', '".db_escape($_REQUEST['Dcvc'])."', '".db_escape($_REQUEST['Rvg2c'])."', '".db_escape($_REQUEST['Verify_key'])."', '".db_escape($_REQUEST['Od_sob'])."', '".db_escape($_REQUEST['Pay_zg'])."', '".db_escape($_REQUEST['buyCase_id'])."', '".db_escape($_REQUEST['Amount'])."', '".db_escape($_SESSION['user_id'])."', '".db_escape($_REQUEST['Pur_name'])."', '".db_escape($_REQUEST['Mobile_number'])."', '".db_escape($_REQUEST['Email'])."', '".db_escape($_REQUEST['Roturl'])."', 'TW', '".db_escape(json_encode($xml))."', '".db_escape($_REQUEST['Remark'])."','{$total_cost}','".date("Y-m-d H:i:s")."')";
db_query($connect,$sql);
echo <<<EOF
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script><!--
top.location.replace("/order_success.php?o={$_REQUEST['Data_id']}");
//--></script>
EOF;
exit;
}else{//其他錯誤
$error="";
switch($xml->Status){
case "-2001":$error="無參數碼及商家代號錯誤";break;
case "-2002":$error="檢查碼錯誤";break;
case "-2003":$error="無付款模式";break;
case "-2004":$error="日期格式錯誤";break;
case "-2005":$error="無交易金額";break;
case "-3001":$error="無此商家代號";break;
case "-3002":$error="商家使用期限已到期";break;
case "-3003":$error="無提供此付款方式";break;
case "-3004":$error="超過付款模式設定金額";break;
case "-4000":$error="此銀行不提供 ATM 帳號";break;
case "-4001":$error="超商代碼取號錯誤";break;
case "-4002":$error="簡訊服務忙錄中";break;
case "-4003":$error="ibon 服務忙錄中";break;
case "-4004":$error="Fami 服務忙錄中";break;
case "-4005":$error="簡訊餘額不足";break;
case "-5000":$error="Smse 執行錯誤";break;
case "-5001":$error="ibon 執行錯誤";break;
case "-5002":$error="fami 執行錯誤";break;
case "-6001":$error="Payment error";break;
default:$error="金流正在維護中,請稍後再試。";break;
}
echo <<<EOF
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script><!--
alert("{$error}");
top.location.replace("/order.php");
//--></script>
EOF;
exit;
}
?>



https://ssl.smse.com.tw/pay_gr/pay_help_paydc_Background_api.ASP

中文字形的下載


目前 下載了

1.王漢宗自由字型



2. CJKUnifonts -> 文鼎

3. 
    華康字型


Reference : http://sandycatss.pixnet.net/blog/post/301323704-%E3%80%90%E8%B3%87%E6%BA%90%E3%80%91%E8%8F%AF%E5%BA%B7%E4%B8%AD%E6%96%87%E5%AD%97%E9%AB%94-%E4%B8%8B%E8%BC%89%E9%BB%9E

=====================================================



文鼎自由字型 (Arphic PL Font)


文鼎 (Arphic) 在 1999 年捐了四套高質素全真 (TrueType) 中文字型給自由軟件界,全部以符合開放源碼要求的 Arphic Public License 發放:
  • bkai00mp.ttf - 文鼎 PL 中楷 (AR PL KaitiM Big5) ,包括了 Big5 中一萬三千多個繁體字,共 14148 字。 (ttf-arphic-bkai00mp)
  • bsmi00lp.ttf - 文鼎 PL 細上海宋 (AR PL Mingti2L Big5) ,包括了 Big5 中一萬三千多個繁體字,共 14148 字。 (ttf-arphic-bsmi00lp)
  • gbsn00lp.ttf - 文鼎 PL 簡報宋 (AR PL SungtiL GB) ,包括了 GB2312 中七千多個簡體字,共 7764 字。(ttf-arphic-gbsn00lp)
  • gkai00mp.ttf - 文鼎 PL 簡中楷 (AR PL KaitiM GB) ,包括了 GB2312 中七千多個簡體字,共 7764 字。 (ttf-arphic-gkai00mp)
文鼎這幾年間亦有更正部份中文字型。大家以可到以下站點下載:
  •  


螢火飛點陣字型 (FireFly Bitmap Font) 及 文鼎PL新宋(AR PL New Sung) (已併入CJKUnifonts)

中文字筆劃較繁複,令向量中文字型加上 Anti-Alias 在細尺寸顯示 (如 CRT 螢幕) 時反而顯得朦糊不清,看得很辛苦。微軟視窗為改善以上問題,在新細明體中殖入了幾套不同大小優化了的點陣字型,當在細尺寸時會顯示已被優化了的點陣字而不是向量字,令其筆劃結實清晰很多。
台灣的螢火飛 (Firefly) 在 2004 年把『文鼎PL細上海宋』和『文鼎PL簡報宋』中的 16976 簡繁體中文字、半形英數字和全形特殊符號合併後,加上 12點(9pt)、13點(10pt)及 15點(11pt)、16點(12pt) 四個常用大小的點陣字併合成一套新字型 - 『文鼎 PL新宋』 (AR PL New Sung, fireflysung.ttf)。這套字可以令 X Window 上的中文顯示清晰許多,達到微軟視窗上的效果。這項工程很浩大,螢火飛個人獨力耗時半年完成。螢火飛更笑言這工程令他的近視深了不少,有隻陪伴有兩年滑鼠亦被他 click 到壯烈犧牲。這位無名滑鼠確實為自由軟件中文代劃下重要的一頁。
現時這套字型已合併在 CJKUnifonts 計劃中。
下載點:

CJKUnifonts

居台的德國人高盛華 (Arne Götje) 先生為組合一組提供所有中日韓文字的字體。數年前,高盛華已把四套文鼎自由字型分別合併成兩套包括簡繁中文的字型 :
  • 文鼎PL上海宋Uni (AR PL ShanHeiSun Uni)
  • 文鼎PL中楷Uni (AR PL ZenKai Uni)
這幾年修正了一些問題,亦加入了閩南話拼音字。2005年併入了由【開源香港常用中文字體計劃】主動提交的香港字型和螢火飛點陣字。
下載點:

王漢宗自由字型

研發天蠶字庫的台灣中原大學數學系王漢宗教授先分別在 2000 和 2004 後捐出十套 WCL 系列字型 和 32 套新字型,全部以 GNU GPL 分發。2005 年,部份字體由於版權糾紛[1]而被迫下架,實屬可惜。

WCL

這十套字體,只含 Big5 字集中繁體字。除了仿宋和粗鋼筆外,其他都外觀都比較花俏,適合用在海報、宣傳單張之類。因為這十套字體原本只為 Windows 而設,所以在 GNU/Linux 問題有不少。直到最近已把大部份問題都已被修正了。
  • WCL-01.ttf 波浪體 HanWangWCL01 wcl01
  • WCL-02.ttf 特明體 HanWangWCL02 wcl02
  • WCL-03.ttf 波卡體空陰 HanWangWCL03 wcl03
  • WCL-04.ttf 綜藝體雙空陰 HanWangWCL04 wcl04
  • WCL-05.ttf 標楷體空心 HanWangWCL05 wcl05
  • WCL-06.ttf 仿宋體 HanWangWCL06 wcl06
  • WCL-07.ttf 粗鋼體 HanWangWCL07 wcl07
  • WCL-08.ttf 粗黑體實陰 HanWangWCL08 wcl08
  • WCL-09.ttf 粗圓體雙空 HanWangWCL09 wcl09
  • WCL-10.ttf 海報體半天水 HanWangWCL10 wcl10

新自由字型

王漢宗在 2004 年再捐出 32 套字型。
  • wt001.ttf 細明 HanWangMingLight hwml
  • wt002.ttf 中明 HanWangMingMedium hwmm
  • wt003.ttf 粗明 HanWangMingBold hwmb
  • wt004.ttf 特明 HanWangMingHeavy hwmh
  • wt005.ttf 超明 HanWangMingBlack hwmbk
  • wt006.ttf 細圓 HanWangYenLight hwyl
  • wt009.ttf 特圓 HanWangYenHeavy hwyh
  • wt011.ttf 細黑 HanWangHeiLight hwhl
  • wt014.ttf 特黑 HanWangHeiHeavy hwhh
  • wt021.ttf 中隸書 HanWangLiSuMedium hwlsm
  • wt024.ttf 中仿宋 HanWangFangSongMedium hwfsm
  • wt028.ttf 疊圓 HanWangKanDaYan hwkdy
  • wt034.ttf 勘流亭 HanWangKanTan hwkt
  • wt040.ttf 綜藝體 HanWangZonYi hwzy
  • wt064.ttf 顏體 HanWangYanKai hwyk
  • wt071.ttf 中行書 HanWangShinSuMedium hwssm
  • wtcc02.ttf 酷儷海報 HanWangCC02 hwcc02
  • wtcc15.ttf 正海報 HanWangCC15 hwcc15
  • wthc06.ttf 鋼筆行楷 HanWangGB06 hwhc
  • wtg-06cut1.ttf 超黑俏皮動物 HanWangGSolid06cut1 hwgsc1
  • wp010-05.ttf 中明注音體 HanWangMingMediumChuIn hwmmci
  • wp110-05.ttf 中明破音字1 HanWangMingMediumChuIn1 hwmmci1
  • wp210-05.ttf 中明破音字2 HanWangMingMediumChuIn2 hwmmci2
  • wp310-05.ttf 中明破音字3 HanWangMingMediumChuIn3 hwmmci3
  • wp010-08.ttf 中楷注音體 HanWangKaiMediumChuIn hwkmci
  • wp110-08.ttf 中楷破音字1 HanWangKaiMediumChuIn1 hwkmci1
  • wp210-08.ttf 中楷破音字2 HanWangKaiMediumChuIn2 hwkmci2
  • wp310-08.ttf 中楷破音字3 HanWangKaiMediumChuIn3 hwkmci3
  • wts11.ttf 粗楷體簡體 HanWang KaiBold-Gb5 wts11
  • wts43.ttf 中魏碑簡體 HanWang WeiBeiMedium-Gb5 wts43
  • wts47.ttf 中仿宋簡體 HanWang FangSongMedium-Gb5 wts47
  • wts55.ttf 細新宋簡體 HanWang SinSongThin-Gb5 wts55
下載點:

安全字形

Justfont研究後,證實以下王漢宗字型並不涉及與文鼎字型的版權糾紛,可以放心使用:
  • 王漢宗顏楷體 wt064.ttf
  • 王漢宗粗鋼體標準 WCL-07.ttf
  • 王漢宗超明體 wt005.ttf
  • 王漢宗特黑體 wt014.ttf
  • 王漢宗鋼筆行楷 wthc06.ttf
  • 王漢宗中魏碑簡體 wts43.ttf
  • 王漢宗超黑俏皮動物 wtg-06cut1.ttf
  • 王漢宗細黑體 wt011.ttf
  • 王漢宗波浪體 WCL-01.ttf
  • 王漢宗特明體標準 WCL-02.ttf
  • 王漢宗波卡體空陰 WCL-03.ttf
  • 王漢宗標楷體空心 WCL-05.ttf
  • 王漢宗仿宋標準 WCL-06.ttf
  • 王漢宗粗黑體實陰 WCL-08.ttf
  • 王漢宗粗圓體雙空 WCL-09.ttf
  • 王漢宗海報體半天水 WCL-10.ttf
  • 王漢宗細新宋簡體 wts55.ttf


cwTeX中文字體

由 cwTeX 中文 Type 1 字體轉換而來的一組繁體TrueType字體,並整合 Alexej Kryukov 的 CM-LGC 字體及 Koanughi Un 的韓文字體。其中cwTeX明體,是台灣為數不多的康熙寫法字體。項目目前由Chen-Pan Liao接手,於[1]提供下載及源碼。
授權協議:GPL
  • cwTeX粗黑
  • cwTeX仿宋
  • cwTeX楷書
  • cwTeX明體
  • cwTeX圓體

“文泉驛”字體

“文泉驛”點陣字體 (WenQuanYi Bitmap Font)

房騫騫(FangQ)創建的開源組織“文泉驛”通過Wiki為開發模式,補充、修正了大量Firefly的點陣,將11X11(像素),12X12(像素),14X14(像素),16X15(像素)點陣漢字擴展到Unicode CJK統一表意字元集的20,902個漢字和CJK擴展A區的6,582。同時,10X10(像素),13X13像素和16X16像素漢字點陣也正在由志願者通過他們的Wiki網站進行細緻的優化。點陣漢字字體“文泉驛點陣宋體”於2005年6月釋出第一個公開版本“文泉半兩”(v0.5),之後陸續發佈了改進版“蒼龍”(v0.6),“北斗”(v0.7)和“嬴政”(v0.8),包含完整的CJK和CJK擴展A區漢字點陣的1.0版本“英雄”也已經在2007年11月4日正式推出。
另外,文泉驛在2007年9月推出了一款包含46000餘符號的雙等寬點陣字體“Unibit”,使用高質量的中文點陣字元替換了GNU Unifont中不完整的中文支持。該字體完整地覆蓋了CJK統一字元集和CJK擴展A區的27000餘漢字。該字體的推出目標在於取代停止更新的GNU Unifont,從而為開源操作系統提供最基本的多語言字體環境。該字體的下載和說明信息如下:

“文泉驛”矢量字體 (WenQuanYi truetype Font)

在完成所有Unicode標準的7萬餘漢字的多規格點陣字體的同時,“文泉驛”同步進行矢量漢字的製作工作(包括基於漢字筆畫提取的矢量漢字製作和文鼎字體的完善)。
文泉驛項目的第一個矢量字體---文泉驛正黑體,在2007年6月開始內部測試,同年9月開始公測,釋出 0.2 版,代號“紫蕭”。目前已經基本可用,但仍有較多細節需要修正;目前最新測試版為 2010年3月2日 發佈的 0.9.45 版,代號“戰國”。文泉驛項目目前的另一矢量字體項目為"文泉驛微米黑",該項目旨在對 Google 的 Droid Sans Fallback 字體 (僅3M) 進行擴展和衍生,首期任務完成GBK漢字的補全工作。目前最新的版本是 0.2,於 2009年12月28日發佈。

華康香港參考宋體 (DFSongStd)

由華康科技提供的參考字型,包括了簡繁體及《香港增補字元集-2001》所增加的四千多香港字,共 35399 個字。雖然有關方面聲稱字體依從香港標準,卻有多處不符合教統局所承認的《常用字字形表》規定的寫法。

Reference : http://wiki.debian.org.hk/w/Where_can_I_find_fonts_for_GNU/Linux#.E7.8E.8B.E6.BC.A2.E5.AE.97.E8.87.AA.E7.94.B1.E5.AD.97.E5.9E.8B

2016年2月25日 星期四

php image



imagettftext 是以   low-left 為基準點....



  imagettfbbox function

Description ¶

array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )
This function calculates and returns the bounding box in pixels for a TrueType text.
以這個例子來看
17  ->  font size
0    ->  angle

Description ¶

array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $colorstring $fontfile , string $text )
Writes the given text into the image using TrueType fonts.

Parameters ¶

image
An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().
size
The font size. Depending on your version of GD, this should be specified as the pixel size (GD1) or point size (GD2).
angle
The angle in degrees, with 0 degrees being left-to-right reading text. Higher values represent a counter-clockwise rotation. For example, a value of 90 would result in bottom-to-top reading text.
x
The coordinates given by x and y will define the basepoint of the first character (roughly the lower-left corner of the character). This is different from the imagestring(), where x and y define the upper-left corner of the first character. For example, "top left" is 0, 0.
y
The y-ordinate. This sets the position of the fonts baseline, not the very bottom of the character.
color
The color index. Using the negative of a color index has the effect of turning off antialiasing. Seeimagecolorallocate().



<?php
$tb 
imagettfbbox(170'airlock.ttf''Hello world!');?>

$tb would contain:
Array
(
    [0] => 0 // lower left X coordinate
    [1] => -1 // lower left Y coordinate
    [2] => 198 // lower right X coordinate
    [3] => -1 // lower right Y coordinate
    [4] => 198 // upper right X coordinate
    [5] => -20 // upper right Y coordinate
    [6] => 0 // upper left X coordinate
    [7] => -20 // upper left Y coordinate
)
應用:  如果你要計算字型的width 和  height

width  = $th[2] - $tb[0]
height = $th[1] - $tb[5]

For horizontal alignment, we need to substract the "text box's" width { $tb[2] or $tb[4] } from the image's width and then substract by two.

Saying you have a 200px wide image, you could do something like this:

<?php

$x 
ceil((200 $tb[2]) / 2); // lower left X coordinate for textimagettftext($im170$x$y$tc'airlock.ttf''Hello world!'); // write text to image?>


imagepsloadfont

搭配  imagepstext() 使用
(PHP 4, PHP 5) 
imagepsloadfont — Load a PostScript Type 1 font from file
Warning
This function was REMOVED in PHP 7.0.0.

Description  

resource imagepsloadfont ( string $filename )
Load a PostScript Type 1 font from the given filename.
<?php// Create a new image instance$im imagecreatetruecolor(35045);// Allocate colors and fill the background$black imagecolorallocate($im000);$white imagecolorallocate($im255255255);imagefilledrectangle($im0034944$white);// Load a font, write to the image and free the font from memory$font imagepsloadfont("bchbi.pfb");imagepstext($im"Testing... It worked!"$font32$white$black3232);imagepsfreefont($font);// Output the imageheader('Content-type: image/png');imagepng($im);imagedestroy($im);?>


imagefttext

(PHP 4 >= 4.0.7, PHP 5, PHP 7)
imagefttext — Write text to the image using fonts using FreeType 2

Description ¶

array imagefttext ( resource $image , float $size , float $angle , int $x , int $y , int $color ,string $fontfile , string $text [, array $extrainfo ] )

Parameters ¶

image
An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().
size
The font size to use in points.
angle
The angle in degrees, with 0 degrees being left-to-right reading text. Higher values represent a counter-clockwise rotation. For example, a value of 90 would result in bottom-to-top reading text.
x
The coordinates given by x and y will define the basepoint of the first character (roughly the lower-left corner of the character). This is different from the imagestring(), where x and y define the upper-left corner of the first character. For example, "top left" is 0, 0.
y
The y-ordinate. This sets the position of the fonts baseline, not the very bottom of the character.
color
The index of the desired color for the text, see imagecolorexact().
fontfile
The path to the TrueType font you wish to use.
Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading/ then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.
When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces.
In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.
<?php// Set the enviroment variable for GDputenv('GDFONTPATH=' realpath('.'));// Name the font to be used (note the lack of the .ttf extension)$font 'SomeFont';?>
<?php// Create a 300x150 image$im imagecreatetruecolor(300150);$black imagecolorallocate($im000);$white imagecolorallocate($im255255255);// Set the background to be whiteimagefilledrectangle($im00299299$white);// Path to our font file$font './arial.ttf';// First we create our bounding box for the first text$bbox imagettfbbox(1045$font'Powered by PHP ' phpversion());// This is our cordinates for X and Y$x $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) - 25;$y $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;// Write itimagettftext($im1045$x$y$black$font'Powered by PHP ' phpversion());// Create the next bounding box for the second text$bbox imagettfbbox(1045$font'and Zend Engine ' zend_version());// Set the cordinates so its next to the first text$x $bbox[0] + (imagesx($im) / 2) - ($bbox[4] / 2) + 10;$y $bbox[1] + (imagesy($im) / 2) - ($bbox[5] / 2) - 5;// Write itimagettftext($im1045$x$y$black$font'and Zend Engine ' zend_version());// Output to browserheader('Content-Type: image/png');imagepng($im);imagedestroy($im);?>


Reference : http://php.net/manual/en/function.imagettftext.php