很多站长朋友们都不太清楚php图像弧形文字,今天小编就来给大家整理php图像弧形文字,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php中imagettftext()函数的使用 2、 php用GD库生成图片用什么函数能让字旋转跟倾斜 3、 php如何生成加粗或者斜体的文字样式图片 4、 PHP图像处理函数有哪些 5、 PHP图像处理 6、 php反弧怎么画 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 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用GD库生成图片用什么函数能让字旋转跟倾斜图片的旋转和翻转也是Web项目中比较常见的功能,但这是两个不同的概念,图片的旋转是按特定的角度来转动图片,而图片的翻转则是将图片的内容按特定的方向对调。图片翻转需要自己编写函数来实现,而旋转图片则可以直接借助GD库中提供的imagerotate()函数完成。该函数的原型如下所示:
复制代码代码如下:
resource imagerotate(resource src_im , float angle, int bgd_color [,int ignore_transpatrent])
该函数可以将src_im图像用给定的angle角度旋转,bgd_color指定了旋转后没有覆盖到的部分的颜色。旋转的中心是图像的中心,旋转后的图像会按比例缩小以适合目标图像的大小(边缘不会被剪去)。如果ignore_transpatrent被设为非零值,则透明色会被忽略(否则会被保留)。下面以JPEG格式的图片为例,声明一个可以旋转图片的函数rotate(),代码如下所示
php如何生成加粗或者斜体的文字样式图片加粗或者斜体的文字可以用php的函数控制.我想你是想生成验证码图片是吗?
如果是想生成验证么图片有几个函数可以考虑
imagecreate($length,$height)创建图片.参数是图片的宽度和高度
imagecolorallocate($image,$r,$g,$b)设置背景色,r b g就是图片的三色rgb参数.这个可以由传入0-255的随机数决定随机的背景色.还可以生成字体色
imagettftext($_image,$fontSize,?mt_rand(-40,?70),?$codeNX,$fontSize*1.5,$_color,?$ttf,?$code[$i]);写入随机的文字,这里要一个字一个字写.所以这个函数要循环调用.
百度了一下 找到了一个类...如下
<?php
/**
?*?安全验证码
?*?
?*?安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码。
?*?如果用中文做验证码(我这里不是哦,有兴趣你来改成用中文的),安全度会更好些,但验证码扭曲和旋转是王道,用了字体也算是已经给字体扭曲了,我就不再去给他添一只扭曲的足了。
?*?可配置的属性都是一些简单直观的变量,我就不用弄一堆的setter/getter了
?*
?*?@author?流水孟春?<cmpan(at)qq测试数据>
?*?@copyright?NEW?BSD
?*?@link?
?*?@link?
?*/
class?YL_Security_Secoder?{
/**
?*?验证码的session的下标
?*?
?*?@var?string
?*/
public?static?$seKey?=?'sid.sekey.ylans.cn';
public?static?$expire?=?3000;?????//?验证码过期时间(s)
/**
?*?验证码中使用的字符,01IO容易混淆,建议不用
?*
?*?@var?string
?*/
public?static?$codeSet?=?'346789ABCDEFGHJKLMNPQRTUVWXY';
public?static?$fontSize?=?25;?????//?验证码字体大小(px)
public?static?$useCurve?=?true;???//?是否画混淆曲线
public?static?$useNoise?=?true;???//?是否添加杂点
public?static?$imageH?=?0;????????//?验证码图片宽
public?static?$imageL?=?0;????????//?验证码图片长
public?static?$length?=?4;????????//?验证码位数
public?static?$bg?=?array(243,?251,?254);??//?背景
protected?static?$_image?=?null;?????//?验证码图片实例
protected?static?$_color?=?null;?????//?验证码字体颜色
/**
?*?输出验证码并把验证码的值保存的session中
?*?验证码保存到session的格式为:?$_SESSION[self::$seKey]?=?array('code'?=>?'验证码值',?'time'?=>?'验证码创建时间');
?*/
public?static?function?entry()?{
//?图片宽(px)
self::$imageL?||?self::$imageL?=?self::$length?*?self::$fontSize?*?1.5?+?self::$fontSize*1.5;?
//?图片高(px)
self::$imageH?||?self::$imageH?=?self::$fontSize?*?2;
//?建立一幅?self::$imageL?x?self::$imageH?的图像
self::$_image?=?imagecreate(self::$imageL,?self::$imageH);?
//?设置背景??????
imagecolorallocate(self::$_image,?self::$bg[0],?self::$bg[1],?self::$bg[2]);?
//?验证码字体随机颜色
self::$_color?=?imagecolorallocate(self::$_image,?mt_rand(1,120),?mt_rand(1,120),?mt_rand(1,120));
//?验证码使用随机字体?
$ttf?=?dirname(__FILE__)?.?'/ttfs/'?.?mt_rand(1,?20)?.?'.ttf';??
if?(self::$useNoise)?{
//?绘杂点
self::_writeNoise();
}?
if?(self::$useCurve)?{
//?绘干扰线
self::_writeCurve();
}
//?绘验证码
$code?=?array();?//?验证码
$codeNX?=?0;?//?验证码第N个字符的左边距
for?($i?=?0;?$i<self::$length;?$i++)?{
$code[$i]?=?self::$codeSet[mt_rand(0,?27)];
$codeNX?+=?mt_rand(self::$fontSize*1.2,?self::$fontSize*1.6);
//?写一个验证码字符
imagettftext(self::$_image,?self::$fontSize,?mt_rand(-40,?70),?$codeNX,?self::$fontSize*1.5,?self::$_color,?$ttf,?$code[$i]);
}
//?保存验证码
isset($_SESSION)?||?session_start();
$_SESSION[self::$seKey]['code']?=?join('',?$code);?//?把校验码保存到session
$_SESSION[self::$seKey]['time']?=?time();??//?验证码创建时间
header('Cache-Control:?private,?max-age=0,?no-store,?no-cache,?must-revalidate');
header('Cache-Control:?post-check=0,?pre-check=0',?false);
header('Pragma:?no-cache');
header("content-type:?image/png");
//?输出图像
imagepng(self::$_image);?
imagedestroy(self::$_image);
}
/**?
?*?画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数)?
?????*??????
?????*??????高中的数学公式咋都忘了涅,写出来
?* 正弦型函数解析式:y=Asin(ωx+φ)+b
?*??????各常数值对函数图像的影响:
?*????????A:决定峰值(即纵向拉伸压缩的倍数)
?*????????b:表示波形在Y轴的位置关系或纵向移动距离(上加下减)
?*????????φ:决定波形与X轴位置关系或横向移动距离(左加右减)
?*????????ω:决定周期(最小正周期T=2π/∣ω∣)
?*
?*/
????protected?static?function?_writeCurve()?{
$A?=?mt_rand(1,?self::$imageH/2);??????????????????//?振幅
$b?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?Y轴方向偏移量
$f?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?X轴方向偏移量
$T?=?mt_rand(self::$imageH*1.5,?self::$imageL*2);??//?周期
$w?=?(2*?M_PI)/$T;
$px1?=?0;??//?曲线横坐标起始位置
$px2?=?mt_rand(self::$imageL/2,?self::$imageL?*?0.667);??//?曲线横坐标结束位置? ????
for?($px=$px1;?$px<=$px2;?$px=$px+?0.9)?{
if?($w!=0)?{
$py?=?$A?*?sin($w*$px?+?$f)+?$b?+?self::$imageH/2;??//?y?=?Asin(ωx+φ)?+?b
$i?=?(int)?((self::$fontSize?-?6)/4);
while?($i?>?0)?{
????imagesetpixel(self::$_image,?$px?+?$i,?$py?+?$i,?self::$_color);??//?这里画像素点比imagettftext和imagestring性能要好很多 ????
????$i--;
}
}
}
$A?=?mt_rand(1,?self::$imageH/2);??????????????????//?振幅
$f?=?mt_rand(-self::$imageH/4,?self::$imageH/4);???//?X轴方向偏移量
$T?=?mt_rand(self::$imageH*1.5,?self::$imageL*2);??//?周期
$w?=?(2*?M_PI)/$T;
$b?=?$py?-?$A?*?sin($w*$px?+?$f)?-?self::$imageH/2;
$px1?=?$px2;
$px2?=?self::$imageL;
for?($px=$px1;?$px<=$px2;?$px=$px+?0.9)?{
if?($w!=0)?{
$py?=?$A?*?sin($w*$px?+?$f)+?$b?+?self::$imageH/2;??//?y?=?Asin(ωx+φ)?+?b
$i?=?(int)?((self::$fontSize?-?8)/4);
while?($i?>?0)?{
????imagesetpixel(self::$_image,?$px?+?$i,?$py?+?$i,?self::$_color);??//?这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多
????$i--;
}
}
}
}
/**
?*?画杂点
?*?往图片上写不同颜色的字母或数字
?*/
protected?static?function?_writeNoise()?{
for($i?=?0;?$i?<?10;?$i++){
//杂点颜色
????$noiseColor?=?imagecolorallocate(
??????????????????????self::$_image,?
??????????????????????mt_rand(150,225),?
??????????????????????mt_rand(150,225),?
??????????????????????mt_rand(150,225)
??????????????????);
for($j?=?0;?$j?<?5;?$j++)?{
//?绘杂点
????imagestring(
????????self::$_image,
????????5,?
????????mt_rand(-10,?self::$imageL),?
????????mt_rand(-10,?self::$imageH),?
????????self::$codeSet[mt_rand(0,?27)],?//?杂点文本为随机的字母或数字
????????$noiseColor
????);
}
}
}
/**
?*?验证验证码是否正确
?*
?*?@param?string?$code?用户验证码
?*?@return?bool?用户验证码是否正确
?*/
public?static?function?check($code)?{
isset($_SESSION)?||?session_start();
//?验证码不能为空
if(empty($code)?||?empty($_SESSION[self::$seKey]))?{
return?false;
}
//?session?过期
if(time()?-?$_SESSION[self::$seKey]['time']?>?self::$expire)?{
unset($_SESSION[self::$seKey]);
return?false;
}
if($code?==?$_SESSION[self::$seKey]['code'])?{
return?true;
}
return?false;
}
}
//?useage
/*
YL_Security_Secoder::$useNoise?=?false;??//?要更安全的话改成true
YL_Security_Secoder::$useCurve?=?true;
YL_Security_Secoder::entry();
*/
/*
//?验证验证码
if?(!YL_Security_Secoder::check(@$_POST['secode']))?{
print?'error?secode';
}
*/
这是效果
PHP图像处理函数有哪些php图像处理函数大全
php图片处理代码分享,包括缩放、剪裁、缩放、翻转、旋转、透明、锐化等。需要的朋友可以参考下
一、创建图片资源
imagecreatetruecolor(width,height);
imagecreatefromgif(图片名称);
imagecreatefrompng(图片名称);
imagecreatefromjpeg(图片名称);画出各种图像
imagegif(图片资源,保存路径);
imagepng()
imagejpeg();
二、获取图片属性
imagesx(res//宽度
imagesy(res//高度
getimagesize(文件路径)
返回一个具有四个单元的数组。索引
0 包含图像宽度的像素值,索引 1 包含图像高度的像素值。索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 =
PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10
= JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的
IMAGETYPE 常量对应。索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG
标记。
销毁图像资源
imagedestroy(图片资源);
三、透明处理
PNG、jpeg透明色都正常,只有gif不正常
imagecolortransparent(resource
image [,int
color])//将某个颜色设置成透明色
imagecolorstotal()
imagecolorforindex();
四、图片的裁剪
imagecopyresized()
imagecopyresampled();
五、加水印(文字、图片)
字符串编码转换string iconv ( string $in_charset ,
string $out_charset , string $str )
六、图片旋转
imagerotate();//制定角度的图片翻转
七、图片的翻转
沿X轴 沿Y轴翻转
八、锐化
imagecolorsforindex()
imagecolorat()
PHP图像处理gif这种动态图片暂时没有方便的方法处理,如果是jpg等很好处理
//来自文件的图片做背景图
$im=imagecreatefromjpeg('a.');
//给创建的图形设制背景色,第一次调用imagecolorallocate是设定背景色
$backgroundColor = imagecolorallocate($im, 255, 255, 255);
//设定图形上写入的文本的颜色
$textColor = imagecolorallocate($im, 255, 0, 0);
//将数字写入到所生成的图片的指定位置,imagestring多用于写入数字与简单ascii字符,其第2个参数的含义是字体,第三四个参数的意思是位置
//imagestring($im, 1, 5, 5, '12345' , $text_color);
//对写入的汉字的字符集进行转换,如果本身就是用utf-8进行的编码则无需要转换了
$content=iconv('utf-8','gb2312',"测试用");
php反弧怎么画以下内容来自网络 希望对你有帮助:
本文实例讲述了php绘制一条弧线的方法。分享给大家供大家参考。具体如下:
弧线相当于截取了椭圆的一部分。代码如下:
复制代码代码如下:
<?php
//1、创建画布
$im = imagecreatetruecolor(300,200);//新建一个真彩色图像,默认背景是黑色,返回图像标识符。另外还有一个函数 imagecreate 已经不推荐使用。
//2、绘制所需要的图像
$red = imagecolorallocate($im,255,0,0);//创建一个颜色,以供使用
imagearc($im,100,80,120,90,0,120,$red);//画一条弧线(椭圆或圆形是一条特殊的弧线)。参数理解,相当于截取了椭圆/圆形的一部分。(100,80)表示中心点;(120,90)表示(椭圆)宽度与高;(0,120):0表示起点,中心点水平向右直线,与弧线交叉点,为0点。120表示从起点开始,顺时针转120度(特殊:当为360时,相当于转了一圈,得到一个圆)。
//3、输出图像
header("content-type: image/png");
imagepng($im);//输出到页面。如果有第二个参数[,$filename],则表示保存图像
//4、销毁图像,释放内存
imagedestroy($im);
?>
关于php图像弧形文字的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php图像弧形文字 php图片加文字的详细内容...