图片 1

php实现图片添加描边字和马赛克的方法_php技巧_脚本之家

在图像中显示的文字也需要按坐标位置画上去。在PHP中不仅支持比较多的字体库,而且提供了非常灵活的文字绘制方法。例如,在图中绘制缩放、倾斜、旋转的文字等。可以使用imageString()、imageStringUP()或imageChar()等函数使用的字体文字绘制到图像中。这些函数的原型如下所示:

本文实例讲述了php实现图片添加描边字和马赛克的方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:
bool imagestring(resource $image,int $font,int $x ,int $y,string $s,int
$color)              //水平地画一行字符串
bool imagestringup(resource $image,int $font,int $x ,int $y,string
$s,int $color)                 //垂直地画一行字符串
bool imagechar(resource $image,int $font,int $x ,int $y,char $c,int
$color)                //水平地画一个字符
bool imagecharup(resource $image,int $font,int $x ,int $y,char $c,int
$color)                 //垂直地画一个字符

马赛克:void imagemask ( resource image, int x1, int y1, int x2, int y2,
int deep)

在上面列出来的四个函数中,前两个函数imageString()和imageStringUP()分别用来向图像中水平和垂直输出一行字符串,而后两个函数imageChar()和imageCharUP()分别用来向图像中水平和垂直输出一个字符。虽然这四个函数有所差异,但调用方式类似。它们都是在$image图像中绘制由第五个参数指定的字符,绘制的位置都是从坐标($x,$y)开始输出。如果是水平地面画一行字符串则是从左向右输出,而垂直地画一行字符串则是从下而上输出。这些函数都可以通过最后一个参数$color给出文字的颜色。第二个参数$font则给出了文字字体标识符,其值为整数1、2、3、4或5,则是使用内置的字体,数字越大则输出的文字尺寸就越大。下面是在一个图像中输出文字的示例:

imagemask() 把坐标 x1,y1 到 x2,y2的矩形区域加上马赛克。

复制代码 代码如下:
$im = imagecreate(150, 150);
 
$bg = imagecolorallocate($im, 255, 255, 255); //设置画布的背景为白色
$black = imagecolorallocate($im, 0, 0, 0); //设置一个颜色变量为黑色
 
$string = “LAMPBrother”; //在图像中输出的字符
 
imagestring($im, 3, 28, 70, $string, $black);
//水平的将字符串输出到图像中
imagestringup($im, 3, 59, 115, $string, $black);
//垂直由下而上输到图像中
for($i=0,$j=strlen($string);$i imagechar($im, 3,
10*($i+1),10*($j+2),$string[$i],$black); //向下倾斜输出每个字符
imagecharup($im, 3, 10*($i+1),10*($j+2),$string[$i],$black);
//向上倾斜输出每个字符
}
 
header(‘Content-type:image/png’);
imagepng($im);
?>

deep为模糊程度,数字越大越模糊。

图片 1

描边:void imagetextouter ( resource image, int size, int x, int y,
string color, string fontfile, string text, string outercolor)

通过上面介绍的四个函数输出内置的字体外,还可以使用imageTtfText()函数,输出一种可以缩放的与设备无关的TrueType字体。TrueType是用数学函数描述字体轮廓外形,即可以用做打印字体,又可以用作屏幕显示,各种操作系统都可以兼容这种字体。由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打印机的分辨率输出。无论放大或是缩小,字体总是光滑的,不会有锯齿出现。例如在Windows系统中,字体库所在的文件夹C:WINDOWSFonts下,对TrueType字体都有标注,如simsun.ttf为TrueType字体中的“宋体”。imageTtfText()函数的原型如下所示:

imagetextouter() 将字符串 text 画到 image 所代表的图像上,从坐标
x,y开始,颜色为 color,边框所使用的颜色为 outercolor,使用 fontfile
所指定的 truetype 字体文件。

复制代码 代码如下:
array imagettftext(resource $image,float $size ,float $angle,int $x,int
$y,int $color ,string $fontfile,string $text)

如果不指定字体文件,则使用gd的内部字体。根据 php 所使用的 gd
库的不同,如果 fontfile 没有以 ‘/’开头,则 ‘.ttf’
将被加到文件名之后并且会搜索库定义字体路径。

该函数需要多个参数,其中参数$image需要提供一个图像资源。参数$size用来设置字体大小,根据GD库版本不同,应该以像素大小指定(GD1)或点大小(GD2)。参数$angle是角度制表示的角度,0º为从左向右读的文本,更高数值表示逆时针旋转。例如90º表示从下向上读的文本。并由($x,$y)两个参数所表示的坐标,定义了一个字符的基本点,大概是字符的左下角。而这和imagestring()函数有所不同,其($x,$y)坐标定义了第一个字符的左上角。参数$color指定颜色索引。使用负的颜色索引值具有关闭防锯齿的效果。参见$fontfile是想要使用的TrueType字体的路径。根据PHP所使用的GD库的不同,当fontfil没有以“/”开头时则“.ttf”将被加到文件名之后,并且会在库定义字体路径中尝试搜索该文件名。最后一个参数$text指定需要输出的文本字符串,可以包含十进制数字化字符表示(形式为:€)来访问字体中超过位置127的字符。UTF-8编码的字符串可以直接传递。如果字符串中使用的某个字符不被字体支持,一个空心矩形将替换该字符。

如果指定了字体文件,由 x,y 所表示的坐标定义了第一个字符的基本点。否则
x,y 定义了第一个字符的右上角。

imagettftext()函数返回一个含有8个单元的数组,表示了文本外框的四个角,顺序为左下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水瓶方向看文字时其左上角。我们通过在下例中的脚本,生成一个白色的400X30像素的PNG图片,其中有黑色(带灰色阴影)“宋体”字体写的“回忆经典!”代码如下所示:

fontfile 是想要使用的 truetype 字体的文件名。

复制代码 代码如下:
$im = imagecreatetruecolor(400, 30);            //创建400
30像素大小的画布
 
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
 
imagefilledrectangle($im, 0, 0, 399, 29, $white);      
//输出一个使用白色填充的矩形作为背景
 
//如果有中文输出,需要将其转码,转换为UTF-8的字符串才可以直接传递
$text = iconv(“GB2312”, “UTF-8”, “回忆经典”);
 
//设定字体,将系统中与simsun.ttc对应的字体复制到当前目录下
$font = ‘simsun.ttc’;
 
imagettftext($im, 20, 0, 12, 21, $grey, $font, $text);     
//输出一个灰色的字符串作为阴影
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);        
//在阴影上输出一个黑色的字符串
 
header(“Content-type: image/png”);
imagepng($im);
 
imagedestroy($im);
 
?>

text 是文本字符串,可以包含 utf-8 字符序列来访问字体中超过前 255
个的字符。

color 是十六进制的#rrggbb格式的颜色,如#ff0000为红色。

outercolor 描边颜色,十六进制的#rrggbb格式。复制代码 代码如下:

复制代码 代码如下:> 16, >> 8, ;
} } $ttf = false; if { $ttf = true; $area = imagettfbbox($size, $angle,
$fontfile, $text); $width = $area[2] – $area[0] + 2; $height =
$area[1] – $area[5] + 2; } else { $width = strlen * 10; $height =
16; } $im_tmp = imagecreate; $white = imagecolorallocate($im_tmp, 255,
255, 255); $black = imagecolorallocate; $color = imagecolorallocatehex;
$outer = imagecolorallocatehex; if { imagettftext($im_tmp, $size, 0, 0,
$height – 2, $black, $fontfile, $text); imagettftext($im, $size, 0, $x,
$y, $color, $fontfile, $text); $y = $y – $height + 2; } else {
imagestring($im_tmp, $size, 0, 0, $text, $black); imagestring($im,
$size, $x, $y, $text, $color); } for ($i = 0; $i < $width; $i ++) {
for ($j = 0; $j < $height; $j ++) { $c = imagecolorat; if {
imagecolorat != $white || imagesetpixel($im, $x + $i, $y + $j – 1,
$outer); imagecolorat != $white || imagesetpixel($im, $x + $i, $y + $j +
1, $outer); imagecolorat != $white || imagesetpixel($im, $x + $i – 1, $y

  • $j, $outer); imagecolorat != $white || imagesetpixel($im, $x + $i + 1,
    $y + $j, $outer); // 取消注释,与fireworks的发光效果相同 /*
    imagecolorat ($im_tmp, $i – 1, $j – 1) != $white || imagesetpixel($im,
    $x + $i – 1, $y + $j – 1, $outer); imagecolorat ($im_tmp, $i + 1, $j –
    1) != $white || imagesetpixel($im, $x + $i + 1, $y + $j – 1, $outer);
    imagecolorat ($im_tmp, $i – 1, $j + 1) != $white || imagesetpixel($im,
    $x + $i – 1, $y + $j + 1, $outer); imagecolorat ($im_tmp, $i + 1, $j +
    1) != $white || imagesetpixel($im, $x + $i + 1, $y + $j + 1, $outer);
    */ } } } imagedestroy; }

//用法示例: header(“content-type: image/png”); $im =
imagecreatefromjpeg; $white = imagecolorallocate; imagetextouter($im, 9,
10, 20, ‘#000000’, “simsun.ttc”, ‘新年快乐’, ‘#ffffff’);
imagetextouter($im, 2, 10, 30, ‘#ffff00’, “”, ‘hello, world!’ ,
‘#103993’); imagepng; imagedestroy; ?>

希望本文所述对大家的PHP程序设计有所帮助。

发表评论

电子邮件地址不会被公开。 必填项已用*标注