php中imagettftext 函式的使用呢

2022-03-31 01:13:45 字數 6646 閱讀 4408

1樓:

共有8個引數,缺一不可:

(1)$image 這個是畫布資源,無需再解釋;

(2)$size,官方文件的解釋是,字型大小,其長度單位依賴於gd庫的版本,對於gd1來說是畫素,對於gd2來說是磅(point)。現在一般都是gd2了,那麼這個磅究竟是什麼意思呢?這涉及到字型設計的基本知識。

操作點陣圖時,以畫素位單位最精確合理,那麼使用gd2庫的時候,如何繪製大小為20畫素的字呢?也就是多少磅才能等於20個畫素呢?這必須通過解析度才能計算出來,而問題是點陣圖本身並沒有解析度的概念。

現在把問題返回來,如果給定$size=20磅,那麼imagettftext()繪製完成時,究竟會佔用多少畫素。無論如何,imagettftext()最終還是要把文字繪製落實到具體的點陣圖畫素上。

這個問題確實非常棘手,此函式內部必然會使用某個解析度ppi來計算被渲染的畫素區域。而gd2庫卻沒有提供任何讓使用者設定或者讀取這個解析度的方法。那麼,我們只能動手測試了。

使用不同的磅值繪製文字,然後測量文字佔據的畫素,通過公式:

ppi = (72*畫素數)/磅值。實驗得出的結論是:

[plain] view plaincopyprint?

1磅==>4畫素, ppi=288

2磅==>5畫素, ppi=180

3磅==>7畫素, ppi=168

4磅==>8畫素, ppi=144

5磅==>9畫素, ppi=129.6

6磅==>10畫素, ppi=120

7磅==>11畫素, ppi=113.14285714286

8磅==>12畫素, ppi=108

9磅==>14畫素, ppi=112

10磅==>15畫素, ppi=108

11磅==>16畫素, ppi=104.72727272727

12磅==>17畫素, ppi=102

13磅==>18畫素, ppi=99.692307692308

14磅==>19畫素, ppi=97.714285714286

15磅==>21畫素, ppi=100.8

16磅==>22畫素, ppi=99

17磅==>23畫素, ppi=97.411764705882

18磅==>25畫素, ppi=100

19磅==>26畫素, ppi=98.526315789474

20磅==>27畫素, ppi=97.2

21磅==>28畫素, ppi=96

22磅==>29畫素, ppi=94.909090909091

23磅==>30畫素, ppi=93.913043478261

24磅==>32畫素, ppi=96

25磅==>33畫素, ppi=95.04

26磅==>34畫素, ppi=94.153846153846

27磅==>35畫素, ppi=93.333333333333

28磅==>36畫素, ppi=92.571428571429

29磅==>38畫素, ppi=94.344827586207

30磅==>39畫素, ppi=93.6

31磅==>40畫素, ppi=92.903225806452

32磅==>41畫素, ppi=92.25

33磅==>43畫素, ppi=93.818181818182

34磅==>44畫素, ppi=93.176470588235

35磅==>46畫素, ppi=94.628571428571

36磅==>47畫素, ppi=94

37磅==>48畫素, ppi=93.405405405405

38磅==>48畫素, ppi=90.947368421053

39磅==>50畫素, ppi=92.307692307692

40磅==>51畫素, ppi=91.8

41磅==>52畫素, ppi=91.317073170732

42磅==>53畫素, ppi=90.857142857143

43磅==>55畫素, ppi=92.093023255814

44磅==>56畫素, ppi=91.636363636364

45磅==>57畫素, ppi=91.2

46磅==>58畫素, ppi=90.782608695652

47磅==>60畫素, ppi=91.914893617021

48磅==>62畫素, ppi=93

49磅==>63畫素, ppi=92.571428571429

50磅==>63畫素, ppi=90.72

51磅==>64畫素, ppi=90.352941176471

52磅==>67畫素, ppi=92.769230769231

53磅==>68畫素, ppi=92.377358490566

54磅==>69畫素, ppi=92

55磅==>70畫素, ppi=91.636363636364

56磅==>71畫素, ppi=91.285714285714

57磅==>72畫素, ppi=90.947368421053

58磅==>74畫素, ppi=91.862068965517

59磅==>75畫素, ppi=91.525423728814

60磅==>76畫素, ppi=91.2

61磅==>77畫素, ppi=90.885245901639

62磅==>78畫素, ppi=90.58064516129

63磅==>79畫素, ppi=90.285714285714

64磅==>81畫素, ppi=91.125

65磅==>83畫素, ppi=91.938461538462

66磅==>84畫素, ppi=91.636363636364

67磅==>85畫素, ppi=91.34328358209

68磅==>86畫素, ppi=91.058823529412

69磅==>86畫素, ppi=89.739130434783

70磅==>88畫素, ppi=90.514285714286

71磅==>90畫素, ppi=91.267605633803

72磅==>91畫素, ppi=91

73磅==>92畫素, ppi=90.739726027397

74磅==>93畫素, ppi=90.486486486486

1磅==>4畫素, ppi=288

2磅==>5畫素, ppi=180

3磅==>7畫素, ppi=168

4磅==>8畫素, ppi=144

5磅==>9畫素, ppi=129.6

6磅==>10畫素, ppi=120

7磅==>11畫素, ppi=113.14285714286

8磅==>12畫素, ppi=108

9磅==>14畫素, ppi=112

10磅==>15畫素, ppi=108

11磅==>16畫素, ppi=104.72727272727

12磅==>17畫素, ppi=102

13磅==>18畫素, ppi=99.692307692308

14磅==>19畫素, ppi=97.714285714286

15磅==>21畫素, ppi=100.8

16磅==>22畫素, ppi=99

17磅==>23畫素, ppi=97.411764705882

18磅==>25畫素, ppi=100

19磅==>26畫素, ppi=98.526315789474

20磅==>27畫素, ppi=97.2

21磅==>28畫素, ppi=96

22磅==>29畫素, ppi=94.909090909091

23磅==>30畫素, ppi=93.913043478261

24磅==>32畫素, ppi=96

25磅==>33畫素, ppi=95.04

26磅==>34畫素, ppi=94.153846153846

27磅==>35畫素, ppi=93.333333333333

28磅==>36畫素, ppi=92.571428571429

29磅==>38畫素, ppi=94.344827586207

30磅==>39畫素, ppi=93.6

31磅==>40畫素, ppi=92.903225806452

32磅==>41畫素, ppi=92.25

33磅==>43畫素, ppi=93.818181818182

34磅==>44畫素, ppi=93.176470588235

35磅==>46畫素, ppi=94.628571428571

36磅==>47畫素, ppi=94

37磅==>48畫素, ppi=93.405405405405

38磅==>48畫素, ppi=90.947368421053

39磅==>50畫素, ppi=92.307692307692

40磅==>51畫素, ppi=91.8

41磅==>52畫素, ppi=91.317073170732

42磅==>53畫素, ppi=90.857142857143

43磅==>55畫素, ppi=92.093023255814

44磅==>56畫素, ppi=91.636363636364

45磅==>57畫素, ppi=91.2

46磅==>58畫素, ppi=90.782608695652

47磅==>60畫素, ppi=91.914893617021

48磅==>62畫素, ppi=93

49磅==>63畫素, ppi=92.571428571429

50磅==>63畫素, ppi=90.72

51磅==>64畫素, ppi=90.352941176471

52磅==>67畫素, ppi=92.769230769231

53磅==>68畫素, ppi=92.377358490566

54磅==>69畫素, ppi=92

55磅==>70畫素, ppi=91.636363636364

56磅==>71畫素, ppi=91.285714285714

57磅==>72畫素, ppi=90.947368421053

58磅==>74畫素, ppi=91.862068965517

59磅==>75畫素, ppi=91.525423728814

60磅==>76畫素, ppi=91.2

61磅==>77畫素, ppi=90.885245901639

62磅==>78畫素, ppi=90.58064516129

63磅==>79畫素, ppi=90.285714285714

64磅==>81畫素, ppi=91.125

65磅==>83畫素, ppi=91.938461538462

66磅==>84畫素, ppi=91.636363636364

67磅==>85畫素, ppi=91.34328358209

68磅==>86畫素, ppi=91.058823529412

69磅==>86畫素, ppi=89.739130434783

70磅==>88畫素, ppi=90.514285714286

71磅==>90畫素, ppi=91.267605633803

72磅==>91畫素, ppi=91

73磅==>92畫素, ppi=90.739726027397

74磅==>93畫素, ppi=90.486486486486

可見當大於46磅時,ppi穩定在90,而小於46磅時,ppi一直在微變。

所以,如果你想繪製20個畫素大小的字型,那麼必須設定$size引數為:14.5磅。

另外需要注意的是,$size並不完全對應字型的顯示大小,因為同樣的$size,不同的字元佔據的空間並不是一樣的。例如,漢字「國」的寬度會比數字1的寬度大得多,對於標點符號,則更是這樣,半形和全形符號也不同。

總之,使用imagettftext()不可能精確控制到畫素級別,只能大概。這也算是向量字型的一個小缺陷。

(3)$angle是旋轉角度。這個官網解釋的比較清楚,需要說明有兩點:一是角度單位是度而不是弧度,二是旋轉的中心點就是引數$x,$y。

(4)$x,$y 被繪製字串的第一個字元的基線點。單位是畫素。這裡涉及到字型設計的基本知識--基線。

這個點絕對不是左上角,而具體是什麼取決於所使用的字型是如何設計的。對於宋體、楷體、黑體等常見的字型中的漢字,這個點大概位於字型的左下部分;而對於英文字母和標點符號,則各不相同。如下圖:

(5)$color 字型的顏色。

(6)$fontfile 字型檔案。也就是包含truetype字型字模的檔案,如楷體字型檔案simkai.ttf。

這種檔案的格式是有標準規範的,而且與平臺無關。所以可以直接把windows系統的字型檔案拷貝到linux下使用。

(7)$text 要渲染的字串。需要注意必須是utf-8編碼的字串。說到字串不得不提php的string資料型別。

雖然名為string,其實php語言本身並不認識各種字元編碼,它只是簡單的把string看做是動態增長的「位元組」陣列,例如strlen()就是返回的位元組數。而我們知道除了ascii編碼的字元和位元組是相同的外,幾乎沒有其他字元編碼中的字元對應一個位元組,例如一個漢字的utf-8編碼佔用3個位元組。至於怎麼解釋其中的字元編碼,需要專門的庫函式如iconv_strlen()。

如果字串使用字面量,那麼其所在的php原始檔就必須編碼為utf-8儲存。

關於php中,關於php中 POST submit 的問題

if post submit post submit 這裡重點不是要接收它的值,而是判斷他有沒有按這個按鈕,也就是是否提交表單,如果提交了就執行它下面 裡的程式,你可以做以下理解 if 提交表單 else 這個是用來判斷下是否為表單提交過來的值用。有的程式寫的不嚴謹,直接通過url也可以執行入庫操作...

php中如何傳送http請求,PHP中如何傳送HTTP請求

看起來你的 正確,不知道你有什麼問題。這個方法不錯,但是最好用一個封裝好的類。比如http client之類的,網上這樣的類挺多了,你可以搜尋一下。當然直接用socket也可以。php 如何傳送http請求 第一種bai 實現方式 實用socket程式設計,通常我du們實用fsockopen這個函z...

php中 php ifSESSION idphp elsephp endif這三者的關係是什麼

就是一般的if else語句啦,只不過這裡除了執行if else 外,還會輸出對應的尖括號包括的內版容。如 上午好 下午權好 當 a 1成立的話會顯示上午好,否則顯示下午好 php mysql使用者登入後驗證if isset session userid session id有沒有寫錯了 sessi...