imagettftextphp
❶ imagefttext生成水印怎麼保存 php的
使用imagepng()/imagejpeg()/imagegif()函數;
使用這幾個函數時添加第二個參數(你想保存的圖片完整路徑),它就會根據這個路徑生成圖片文件並且保存到該路徑下。比如:
$im=imagecreatefrompng("1.png"); //取出原圖
$hb=imagecolorallocate($im,0,0,0);
imagettftext($im,50,0,40,150,$hb,"STXINGKA.TTF","兄弟連lamp156"); //加水印
imagepng($im,"images/water1.png"); //保存水印圖到本文件夾下images文件夾,水印圖命名為water1.png
imagedestroy($im);
//由於是保存圖片而非顯示圖片,所以header("content-type:image/png");是不需要的
❷ php中imagettftext()函數的使用~ 呢
共有8個參數,缺一不可:
(1)$image 這個是畫布資源,無需再解釋;
(2)$size,官方文檔的解釋是,字體大小,其長度單位依賴於GD庫的版本,對於GD1來說是像素,對於GD2來說是磅(point)。現在一般都是GD2了,那麼這個磅究竟是什麼意思呢?這涉及到字體設計的基本知識。
操作點陣圖時,以像素位單位最精確合理,那麼使用GD2庫的時候,如何繪制大小為20像素的字呢?也就是多少磅才能等於20個像素呢?這必須通過解析度才能計算出來,而問題是點陣圖本身並沒有解析度的概念。
現在把問題返回來,如果給定$size=20磅,那麼imageTtfText()繪制完成時,究竟會佔用多少像素。無論如何,imageTtfText()最終還是要把文字繪制落實到具體的點陣圖像素上。
這個問題確實非常棘手,此函數內部必然會使用某個解析度PPI來計算被渲染的像素區域。而GD2庫卻沒有提供任何讓用戶設置或者讀取這個解析度的方法。那麼,我們只能動手測試了。使用不同的磅值繪制文字,然後測量文字占據的像素,通過公式:
PPI = (72*像素數)/磅值。實驗得出的結論是:
[plain] view plainprint?
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,imagettftext,imagettfbbox問題
Date.php 裡面第12行調用了red-button.php這個文件,實際上伺服器找不到,你檢查一下你date.php和red-button.php的路徑。
後面的就不說了,應該都是前面這個文件沒有正常調用造成的。
❹ php7.1 imagettftext()運行出錯,在5.6版本就正常了,請問是怎麼回事
早上也碰到,排查了下,發現是字體庫(ttf後綴文件)路徑問題。
把字體庫路徑寫死了,再試下,能顯示的話,再把路徑生成邏輯調整下,應該就可以了,還是不能顯示,再看看別人答案吧。
❺ php的GD庫imagettftext函數解決中文亂碼問題
本文實例講述了php的GD庫imagettftext函數解決中文亂碼問題的方法。分享給大家供大家參考。具體如下:
使用imagettftext寫中文時,常出現亂碼問題。解決方法是將中文字元串轉為utf-8格式即可。具體代碼如下(文件格式為gb2312):
復制代碼
代碼如下:<?php
$im
=
imagecreatefromjpeg('./1.jpg');
$w
=
imagesx($im);
$h
=
imagesy($im);
$green
=
imagecolorallocate($im,50,100,200);
$str
=
iconv('gb2312','utf-8','幸福就在身邊');//解決亂碼問題
imagettftext($im,16,0,200,100,$green,'./simhei.ttf',$str);
header("content-type:
image/jpeg");
imagejpeg($im);
imagedestroy($im);
?>
❻ PHP中為什麼用不了ImagettfText()
我也遇到了這樣的問題,我的是Fonts的路徑沒寫全,只是按書上寫了個這"FontsSTXINGKA.TTF"實際上在windows下應是這個$font="C:WindowsFontsSTXINGKA.TTF"
❼ php imagettftext裡面怎麼換行
function draw_txt_to($card,$pos,$string)
{
$font_color = imagecolorallocate($card, $pos['color'][0],$pos['color'][1],$pos['color'][2]);
$font_file = BASEPATH.'../'.cfg('ttf');
$_string='';
$__string='';
for($i=0;$i<mb_strlen($string);$i++)
{
$box=imagettfbbox($pos['fontsize'],0,$font_file,$_string);
$_string_length=$box[2]-$box[0];
$box=imagettfbbox($pos['fontsize'],0,$font_file,mb_substr($string,$i,1));
if( $_string_length+$box[2]-$box[0]<$pos['width'])
{
$_string.=mb_substr($string,$i,1);
}
else
{
$__string.=$_string."\n";
$_string=mb_substr($string,$i,1);
}
}
$__string.=$_string;
$box=imagettfbbox($pos['fontsize'],0,$font_file,mb_substr($__string,0,1));
imagettftext(
$card,
$pos['fontsize'],
0,
$pos['left'],
$pos['top']+($box[3]-$box[7]),
$font_color,
$font_file,
$__string);
}
❽ php imagettftext一直報錯
可能是進入病毒了。