微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php实现图片添加描边字和马赛克的方法

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

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

imagemask() 把坐标 x1,y1 到 x2,y2(图像左上角为 0,0)的矩形区域加上马赛克。

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

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

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

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

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

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

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

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

outercolor 描边颜色,十六进制的#rrggbb格式。

代码如下:
PHP /** * gd image mask * * @copyright ugia.cn

*/
function imagemask(&$im,$x1,$y1,$x2,$y2,$deep)
{
for($x = $x1; $x < $x2; $x += $deep)
{
for ($y = $y1; $y < $y2; $y += $deep)
{
$color = imagecolorat ($im,$x + round($deep / 2),$y + round($deep / 2));
imagefilledrectangle ($im,$x,$y,$x + $deep,$y + $deep,$color);
}
}
}
//马赛克用法示例:
header("content-type: image/png");
$im = imagecreatefromjpeg("test.jpg");
imagemask($im,57,22,103,40,8);
imagepng($im);
imagedestroy($im);
?>

运行效果如下图所示:

代码如下:
/
function imagetextouter(&$im,$size,$color,$fontfile,$text,$outer)
{
if (!function_exists('imagecolorallocatehex'))
{
function imagecolorallocatehex($im,$s)
{
if($s{0} == "#") $s = substr($s,1);
$bg_dec = hexdec($s);
return imagecolorallocate($im,
($bg_dec & 0xff0000) >> 16,
($bg_dec & 0x00ff00) >> 8,
($bg_dec & 0x0000ff)
);
}
}
$ttf = false;
if (is_file($fontfile))
{
$ttf = true;
$area = imagettfbBox($size,$angle,$text);
$width = $area[2] - $area[0] + 2;
$height = $area[1] - $area[5] + 2;
}
else
{
$width = strlen($text)
10;
$height = 16;
}
$im_tmp = imagecreate($width,$height);
$white = imagecolorallocate($im_tmp,255,255);
$black = imagecolorallocate($im_tmp,0);
$color = imagecolorallocatehex($im,$color);
$outer = imagecolorallocatehex($im,$outer);
if ($ttf)
{
imagettftext($im_tmp,$height - 2,$black,$text);
imagettftext($im,$text);
$y = $y - $height + 2;
}
else
{
imagestring($im_tmp,$black);
imagestring($im,$color);
}
for ($i = 0; $i < $width; $i ++)
{
for ($j = 0; $j < $height; $j ++)
{
$c = imagecolorat($im_tmp,$i,$j);
if ($c !== $white)
{
imagecolorat ($im_tmp,$j - 1) != $white || imagesetpixel($im,$x + $i,$y + $j - 1,$outer);
imagecolorat ($im_tmp,$j + 1) != $white || imagesetpixel($im,$y + $j + 1,$i - 1,$j) != $white || imagesetpixel($im,$x + $i - 1,$y + $j,$i + 1,$x + $i + 1,$outer);
// 取消注释,与fireworks的发光效果相同
/
imagecolorat ($im_tmp,$outer);
/
}
}
}
imagedestroy($im_tmp);
}

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

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

原文地址:https://www.jb51.cc/php/23124.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐