图形上增加描边字和德雷斯顿克php代码,图像函数大比方

本文实例叙述了php完毕图片增添描边字和西安克的秘籍。共享给咱们供大家参照他事他说加以考察。具体落到实处格局如下:

<?php教程
/**
 * gd image mask
 *
 * @copyright ugia.cn

有一对点须求留心:

正如格局是一种办法:
if(!function_exists(‘imagecreate’)) {
die(‘本服务器不支持GD模块’);
}
万一不援救的话,怎么样布署 ?
下载gd模块的dll文件,修改php.ini,重启服务器就能够.
以下简称PHP作图为PS.
当您筹算 PS的话,应该做到如下如下步骤,那是必经的.
1:成立基本PS对象(小编只要为$image),填充背景(默许黑),未来的整整ps操作都以依照这一个背景图像的.
2:在$image上作图.
3:输出那一个图像.
4:销毁对象,清除使用内部存款和储蓄器.
首先,大家来认知多少个常用的函数,这个函数在php手册里面都有详实介绍,此处轮廓引用下.
图形上增加描边字和德雷斯顿克php代码,图像函数大比方。resource imagecreate ( int x_size, int y_size )
imagecreate() 重返三个图像标记符,代表了一幅大小为 x_size 和 y_size
的空白图像。

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

 */
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);
        }
    }
}
?>

1,创制画布,imagecreatetruecolor()
   配置颜色,imagecolorallocate()
2,用矩形填充画布,imagefilledrectangle()
3,把TrueType文本写入图像,imagettftext()
4,加多苦恼点,imagesetpixel()
5, 加多干扰线,imageline()
6, header(“Content-type:image/gif”);
   imagegif($image);
   imagedestroy($image);//销毁资源
7,join()把数组转化为字符串,range()是限制数组
8,array_merge()把很比较多整合并为叁个数组
9,str_shuffle()打乱字符串
10,substr()截取字符串
验证码应该分为两有的去想,一部分是图像,一部分是文件,图疑似基于gd库中的函数来实现,画布,颜色,
填充,苦恼线,困扰点等,非常重大的一些是用imagettftext()把公文写入图像,文本是通过自定义随机
字符串函数获得,随机函数能够扶助纯数字、大小写混合随机产生。把验证码操作封装成函数,调用就能够,
调用时最棒新开二个PHP文件。

此函数基本同imagetruecolor($width,$height).

int imagecolorallocate ( resource image, int red, int green, int blue
)
imagecolorallocate() 重返二个标志符,代表了由给定的 途乐GB
成分结合的颜料。image 参数是 imagecreatetruecolor()
函数的重回值。red,green 和 blue
分别是所必要的颜料的红,绿,蓝成分。这几个参数是 0 到 255
的板寸可能十六进制的 0x00 到 0xFF。imagecolorallocate()

imagemask() 把坐标 x1,y1 到 x2,y2(图像左上角为 0,
0)的矩形区域拉长罗利克。

  示例:
<?php
header(“content-type: image/png”);
$im = imagecreatefromjpeg(“test.jpg”);
imagemask($im, 57, 22, 103, 40, 8);
imagepng($im);
imagedestroy($im);
?>

代码如下:

无法不被调用以创办种种用在 image 所表示的图像中的颜色。

bool imagefill ( resource image, int x, int y, int color )
imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color

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

 

image.php页面(须求调用string.php中发生随机字符串的函数)

颜色推行区域填充(即与 x, y 点颜色同样且周边的点都会被填充)。

bool imageline ( resource image, int x1, int y1, int x2, int y2, int
color )
imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到

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

<?php
/**
 * gd image text outer
 *
 * @copyright ugia.cn

?php
//通过GD库做验证码
function
verifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name=”verify”){
//创设画布
require_once’string.func.php’;
$width = 80;
$height = 28;
$image = imagecreatetruecolor($width,$height);//画布
$white = imagecolorallocate($image,255,255,255);//白色
//用矩形填充画布
imagefilledrectangle($image,1,1,$width-2,$height-2,$white);
$chars = buildRandomString($type,$length);//调用函数发生随机字符串
$_SESSION[$sess_name] =
$chars;//把自由字符串写入session,前边验证用户填入的是或不是准确时会用到
for($i=0;$i<$length;$i++){
$size = mt_rand(14,18);//mt_rand()生成随机数
$angle = mt_rand(-15,15);
$x = 5+$i*$size;
$y = mt_rand(20,26);
$fontfile = “../fonts/SIMYOU.TTF”;
$color =
imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
$text = substr($chars,$i,1);
imagettftext($image,$size,$angle,$x,$y,$color,$fontfile,$text);//imagettftext()把TrueType文本写入图像
}
for($i=0;$i<$pixel;$i++){
  $color =
imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
 
imagesetpixel($image,mt_rand(0,$width-1),mt_rand(0,$height-1),$color);//添加点
}
for($i=0;$i<$line;$i++){
  $color =
imagecolorallocate($image,mt_rand(50,90),mt_rand(80,200),mt_rand(90,180));
 
imageline($image,mt_rand(0,$width-1),mt_rand(0,$height-1),mt_rand(0,$width-1),mt_rand(0,$height-1),$color);//增多直线
}
ob_clean(); //清除从前的缓存
header(“Content-type:image/gif”);
imagegif($image);
imagedestroy($image);//销毁能源
}

x2,y2(图像左上角为 0, 0)画一条线条。

bool imagestring ( resource image, int font, int x, int y, string s, int
col )
imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y
坐标处(那是字符串左上角坐标,整幅图像的左上角为 0,0)。如若 font 是

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

 */
function imagetextouter(&$im, $size, $x, $y, $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, $fontfile, $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, 255);
    $black = imagecolorallocate($im_tmp, 0, 0, 0);
    $color = imagecolorallocatehex($im, $color);
    $outer = imagecolorallocatehex($im, $outer);
    if ($ttf)
    {
        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($im_tmp, $i, $j);
            if ($c !== $white)
            {
                imagecolorat ($im_tmp, $i, $j – 1) != $white ||
imagesetpixel($im, $x + $i, $y + $j – 1, $outer);
                imagecolorat ($im_tmp, $i, $j + 1) != $white ||
imagesetpixel($im, $x + $i, $y + $j + 1, $outer);
                imagecolorat ($im_tmp, $i – 1, $j) != $white ||
imagesetpixel($im, $x + $i – 1, $y + $j, $outer);
                imagecolorat ($im_tmp, $i + 1, $j) != $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($im_tmp);
}
?>

string.php页面(爆发随机字符串)

1,2,3,4 或 5,则使用内置字体。

array imagettftext ( resource image, float size, float angle, int x, int
y, int color, string fontfile, string text )

假如不钦点字体文件,则动用gd的里边字体。依照 php 所利用的 gd
库的两样,假若 fontfile 未有以 ‘/’初叶,则 ‘.ttf’
将被加到文件名未来还要会搜索库定义字体路线。

  示例:
<?php
header(“content-type: image/png”);
$im = imagecreatefromjpeg(“bluesky.jpg”);
$white = imagecolorallocate($im, 255,255,255);
imagetextouter($im, 9, 10, 20, ‘#000000’, “simsun.ttc”, ‘新禧欢畅’,
‘#ffffff’);
imagetextouter($im, 2, 10, 30, ‘#ffff00’, “”, ‘hello, world!’ ,
‘#103993’);
imagepng($im);
imagedestroy($im);
?>

 

本函数尤为重要,参数相当多,此处不再列出,它根本是写字到图像上,和地点的函数类似,但必前面一个庞大.

bool imagefilltoborder ( resource image, int x, int y, int border, int
color )
imagefilltoborder() 从 x,y(图像左上角为 0, 0)点开头用 color
颜色实行区域填充,直到遇见颜色为 border

若果钦赐了字体文件,由 x,y
所表示的坐标定义了第二个字符的首要(大概是字符的左下角)。不然 x,y
定义了第八个字符的右上角。

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

 

的边界停止。【注:边界内的兼具颜色都会被填充。如若钦定的边界色和该点颜色同样,则未有填写。假若图像中从不应该边界色,则整幅图像都会被填充。】

bool imagefilledellipse ( resource image, int cx, int cy, int w, int h,
int color )
imagefilledellipse() 在 image 所表示的图像中以 cx,cy(图像左上角为 0,
0)为主题画二个椭圆。w 和 h 分别钦定了椭圆的宽和高。椭圆用 color

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

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

水彩填充。即便成功则赶回 TRUE,战败则赶回 FALSE。

text 是文本字符串,能够涵盖 utf-8
字符体系(格局为:{)来做客字体中中国足球球联赛越前 255 个的字符。

  deep为模糊程度,数字越大越模糊。
描边:void imagetextouter ( resource image, int size, int x, int y,
string color, string fontfile, string text, string outercolor)

输出图像数据:imagepng($image[,$filename])

例一:输出水清水蓝背景和交叉白线的图样
<?php
$width=35;
$height=35;
//创建对象
$image=imagecreate($width,$height);
//提取颜色
$color_white=imagecolorallocate($image,255,255,255);//白色
$color_blue=imagecolorallocate($image,0,0,108);//蓝色
imagefill($image,0,0,$color_blue);
//作图
//线宽
imagesetthickness($image,3);
imageline($image,0,0,$width,$height ,$color_white);
imageline($image,$width,0,0,$height ,$color_white);
//发送对象至头
header(‘content-type:image/png’);
imagepng($image);
/*
//发送对象至文件
$filename=”ex1.png”;
imagepng($image,$filename);
*/
//销毁对象
imagedestroy($image);
?>
出口图像:
在线演示:
例二: 阴阳图
<?php
$width=400;
$height=400;
$image=imagecreatetruecolor($width,$height);
//提取颜色
$color_black=imagecolorallocate($image,0,2,0);//
$color_white=imagecolorallocate($image,255,255,255);//白色
$color_blue=imagecolorallocate($image,0,0,108);//蓝色
$color_red=imagecolorallocate($image,151,0,4);//红色
$color_my=imagecolorallocate($image,192,192,255);//背景
$color_temp=imagecolorallocate($image,199,199,199);//背景
//作图
imagefill($image,0,0,$color_white);
//第叁个是大圆
imagefilledarc
($image,$width/2,$height/2,$height,$height,0,360,$color_blue,IMG_ARC_PIE);
//八个小圆
imagefilledellipse ($image,$width/2,$height/4
,$height/2,$height/2,$color_red);
imagefilledellipse ($image,$width/2,$height/4 *
3,$height/2,$height/2,$color_blue);
/*imagefilledellipse — 画一椭圆并填写*/
imagefilledarc
($image,$width/2,$height/2,$height,$height,-90,90,$color_red,IMG_ARC_PIE);
imagefilledellipse ($image,$width/2,$height/4 *
3,$height/2,$height/2,$color_blue);
//发送对象至头
header(‘content-type:image/png’);
imagepng($image);
/*
//发送对象至文件
$filename=”ex1.png”;
imagepng($image,$filename);
*/
//销毁对象
imagedestroy($image);
?>
演示:

例三:3D图像–cool
<?php
$width=400;
$height=400;
$image = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$gray = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
$darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);
$navy = imagecolorallocate($image, 0x00, 0x00, 0x80);
$darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);
$red = imagecolorallocate($image, 0xFF, 0x00, 0x00);
$darkred = imagecolorallocate($image, 0x90, 0x00, 0x00);
imagefill($image,0,0,$white);
// make the 3D effect
for ($i = $height /2 +20; $i > $height /2; $i–) {
imagefilledarc($image, $width/2, $i, $width/2, $height /2, 0, 45,
$darknavy, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $i, $width/2, $height /2, 45, 75 ,
$darkgray, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $i, $width/2, $height /2, 75, 360 ,
$darkred, IMG_ARC_PIE);
}
imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 0,
45, $navy, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 45,
75 , $gray, IMG_ARC_PIE);
imagefilledarc($image, $width/2, $height /2, $width/2, $height /2, 75,
360 , $red, IMG_ARC_PIE);
// flush image
header(‘Content-type: image/png’);
imagepng($image);
imagedestroy($image);
/*
//发送对象至文件
$filename=”ex1.png”;
imagepng($image,$filename);
*/
?>
输出:
演示:

例四:轻松的验证码
PHP创造验证码特别轻松,轻松的要死,轻便的思路是如此的:
随机种子生成,提取随机字符,相连打字与印刷到图片,输出.,为了避防万一干眼,能够Infiniti制提取颜色,也能够自定义颜色,上边看看:
<?php
session_start();
$width=65;
$height=20;
$sourcestrings=”0123456789aqwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM”;
$image=imagecreate($width,$height);
$colorarrs=array(
imagecolorallocate($image,255,255,255),//white
imagecolorallocate($image,0 ,0 , 0)//black
);
unset($sessionval);
imagesetthickness($image,3);
//随机得到字符串个数
$strsize=rand(3,5);
imagefill($image,0,0,$colorarrs[0]);
//贰个个的写字符串到图片
for($i=0;$i<$strsize;$i++){
$i_temp=rand(1,62);
$sessionval .=$sourcestrings[$i_temp];
$fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
$y_i = $height/2 + $font_size /3 ;
imagechar($image,5, 1+ $i * $width
/$strsize,5,$sourcestrings[$i_temp],$fontcolor);
}
//写入session,以往验证用
unset($_SESSION[‘cjjer’]);
$_SESSION[‘cjjer’] = $sessionval;
//增加杂点
for($i=0;$i<$width /$height *2;$i++)
{ $i_x=rand(0,$width);
$i_y=rand(0,$height);
$pixelcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($image,$i_x,$i_y,$pixelcolor);
}
header(‘content-type:image/png’);
imagepng($image);
imagedestroy($image);
?>
浮动的体制演示:
在线演示:
有个很醒指标标题正是变化的图样非常不够艳丽,进而相当多的用户看起来不知情,这样吧,大家休戚与共设定多少个相比艳丽的颜色然后输出,扩大colorarrs数组:
$colorarrs=array(
imagecolorallocate($image,255,255,255),
imagecolorallocate($image,0,0,0),
imagecolorallocate($image,0,70,0),
imagecolorallocate($image,92,0,12),
imagecolorallocate($image,0,0,128),
imagecolorallocate($image,233,10,216)
);
然后把23行变为(17行):
$fontcolor=$colorarrs[rand(1,count($colorarrs)-1)];
输出:
在线演示:
例五:大点的可比cool的验证码
PS
的图像依然相当的小的,不经常候为了一点原因(个人站点为了玩cool,just笔者,商业站点玩风格,吸援引户,just
google,后话),验证码不是囿于于十八个px的范围,一时候完全能够整个2百多,没啥难点,那时候,一种方案是把前边生成的小图强制大点,能够不?
可以,可是,看起来远远不足光滑,那是真情,显明,宽带不再是最要紧的难点,不说别的的,下边演示多少个相比雅观的更改格局:
<?php
session_start();
$width=600;
$height=100;
if($height < $width /6)
$height=$width / 4;
$sourcestrings=”0123456789aqwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM”;
//创造对象
$image=imagecreate($width,$height);
$white=imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$white);
//加载字体库
$fonts= dirname(__FILE__);
putenv(‘”gdfontpath=”.$fonts=.””‘);
$fontname=’arial’;
$font_size=floor($height / 2);
//获得字符串
unset($sessionval);
$strsize=rand(5,8);
for($i=0;$i<$strsize;$i++){
$i_temp=rand(1,62);
$sessionval .=$sourcestrings[$i_temp];
$x_i =$font_size + $i *$width / ($strsize+1);
$y_i = $height / 2;
$angle_i=rand(-120,120);
$fontcolor_a=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
imageTTFText($image,$font_size,$angle_i,$x_i,$y_i,$fontcolor_a,$fontname,$sourcestrings[$i_temp]);
}
unset($_SESSION[‘cjjer’]);
$_SESSION[‘cjjer’] = $sessionval;
//杂点数目
for($i=0;$i<$width * $height / 100;$i++)
{
$i_x=rand(0,$width);
$i_y=rand(0,$height);
imagesetpixel($image,$i_x,$i_y,imagecolorallocate($image,rand(0,255),rand(0,2550),rand(0,255)));
}
//发送对象
header(‘content-type:image/png’);
imagepng($image);
imagedestroy($image);
?>

在线测验:
解释性表明:
首先是宽和高,高太小字都看不清楚.随机提取的字符照旧那么几个:
$sourcestrings=”0123456789aqwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM”;
成立对象,填充成浅米灰:
$image=imagecreate($width,$height);
$white=imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$white);
接下来加载您要验证码的字体:
$fonts=
dirname(__FILE__);//再次回到当前根目录,字体文件复制到这里,字体文件是*.ttf文件
putenv(‘”gdfontpath=”.$fonts=.””‘);
$fontname=’arial’;
概念字符的可观,这里自身设置成中度的四分之二:
$font_size=floor($height / 2);
排除变量,随机设置要生成字符的个数:
unset($sessionval);
$strsize=rand(5,8);
巡回,三个个的把字符打上去:
收获本次巡回的字符串.,并加在变量后边一会儿写入session
$i_temp=rand(1,62);
$sessionval .=$sourcestrings[$i_temp];
收获写入图像的字符串的岗位(x和y坐标)
$x_i =$font_size + $i *$width / ($strsize+1);
$y_i = $height / 2;
安装倾斜度,是从正面看的,.
$angle_i=rand(-120,120);
任意生成颜色,
$fontcolor_a=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
写入到图像;
imageTTFText($image,$font_size,$angle_i,$x_i,$y_i,$fontcolor_a,$fontname,$sourcestrings[$i_temp]);
假使对此函数存在难点,请查阅有关资料.特别轻便.
写入到session,一边注册码使用:
unset($_SESSION[‘cjjer’]);
$_SESSION[‘cjjer’] = $sessionval;
增多杂点:
//杂点数目
for($i=0;$i<$width * $height / 100;$i++)
{
$i_x=rand(0,$width);
$i_y=rand(0,$height);
imagesetpixel($image,$i_x,$i_y,imagecolorallocate($image,rand(0,255),rand(0,2550),rand(0,255)));
}
出口到头:
header(‘content-type:image/png’);//那行注解是png图像,可不要,暗中认可能够输出的.但不是图像的头格式
imagepng($image);
imagedestroy($image);
您能够加载你协和的字体库,设置旋转角度$angle_i=rand(-120,120);设置字体中度$font_size=floor($height
/ 2);字体颜色$fontcolor_a和私自数的个数:$strsize=rand(5,8);

例六:给图片打上水印,生成缩列图
理念的ASP页子打水印和转移缩列图都以相比较麻烦的,一般选择到的是其他零件什么的,然而,PHP能够轻巧的干那么些专门的学问,正如你预料,不到30行的主次消除这整个,请看那么些源程序:
<?php
$source=”my.jpg”;
$zoom=0.5;
$str=’小编是男神,你是MM么?’;
$image=imagecreatefromjpeg($source);
$width=imagesx($image);
$height=imagesy($image);
$color_red=imagecolorallocate($image,111,0,0);//红色
$font=dirname(__FILE__). “//simsun.ttc”;
$str=iconv(‘GB2312′,’UTF-8’,$str);
$fontsize=30;
$angle=25;
$fromx=$width/5;
$fromy=$height/2;
imagettftext($image,$fontsize,$angle,$fromx,$fromy,$color_red,$font,$str);
$width_temp=imagesx($image) * $zoom;
$height_temp=imagesy($image) * $zoom;
$img=imagecreatetruecolor($width_temp,$height_temp);
imagecopyresized ($img,$image,0,0,0,0,$width_temp,
$height_temp,$width,$height);
imagedestroy($image);
$file_zoomname=”my_zoom_jpeg.jpg”;
imagejpeg($img,$file_zoomname);
imagedestroy($img);
?>
原有图片:
生成的jpg图片:
本来图片70K,
这里说下,假诺生成gif,文件18k多,而png要用去76k,so大家转移缩列图用jpeg格式.
代码解析:
这边本身先安装了多少个参数:
$source=”my.jpg”; //源图片
$zoom=0.5; //缩放百分比
$str=’小编是潮男,你是MM么?’; //水印的文字
装载源图(不打水印不装载):
$image=imagecreatefromjpeg($source);
收获长,宽的轻重缓急:
$width=imagesx($image);
$height=imagesy($image);
安装水印字体,因为大家用的是中文,必须导入普通话字体库,不然写不上或乱码,然后必须转换字符串编码
$font=dirname(__FILE__). “//simsun.ttc”;
$str=iconv(‘GB2312′,’UTF-8’,$str);
设置起初点,字体大小,视角:,写上字符串:
$fontsize=30;
$angle=25;
$fromx=$width/5;
$fromy=$height/2;
imagettftext($image,$fontsize,$angle,$fromx,$fromy,$color_red,$font,$str);
依照缩放的尺寸须要生成新大小的靶子:
$width_temp=imagesx($image) * $zoom;
$height_temp=imagesy($image) * $zoom;
$img=imagecreatetruecolor($width_temp,$height_temp);
把源图copy到新图,gd库的imagecopyresized自动缩放大小的
imagecopyresized ($img,$image,0,0,0,0,$width_temp,
$height_temp,$width,$height);
变动小图片,清除对象:
imagedestroy($image);
$file_zoomname=”my_zoom_jpeg.jpg”;
imagejpeg($img,$file_zoomname);
imagedestroy($img);
扭转缩洌图,水印大意大旨技艺就那样点.

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

  imagetextouter() 将字符串 text 画到 image 所表示的图像上,从坐标
x,y(左上角为 0, 0)起头,颜色为 color,边框所使用的颜色为
outercolor,使用 fontfile 所钦赐的 truetype 字体文件。

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

  假诺不点名字体文件,则利用gd的个中字体。依照 php 所利用的 gd
库的两样,假如 fontfile 未有以 ‘/’早先,则 ‘.ttf’
将被加到文件名之后还要会寻觅库定义字体路线。

复制代码 代码如下:

  如若钦点了字体文件,由 x,y
所代表的坐标定义了第七个字符的主要性(大致是字符的左下角)。不然 x,y
定义了第三个字符的右上角。

<?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);
?>

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

运转效果如下图所示:

  text 是文本字符串,能够分包 utf-8
字符类别(格局为:{)来拜访字体中中国足球球组织超级联赛越前 255 个的字符。

美高梅开户网址 1

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

复制代码 代码如下:

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

<?php
/**
 * gd image text outer
 *
 * @copyright ugia.cn
 
 */
function imagetextouter(&$im, $size, $x, $y, $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, $fontfile, $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, 255);
    $black = imagecolorallocate($im_tmp, 0, 0, 0);
    $color = imagecolorallocatehex($im, $color);
    $outer = imagecolorallocatehex($im, $outer);
    if ($ttf)
    {
        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($im_tmp, $i, $j);
            if ($c !== $white)
            {
                imagecolorat ($im_tmp, $i, $j – 1) != $white ||
imagesetpixel($im, $x + $i, $y + $j – 1, $outer);
                imagecolorat ($im_tmp, $i, $j + 1) != $white ||
imagesetpixel($im, $x + $i, $y + $j + 1, $outer);
                imagecolorat ($im_tmp, $i – 1, $j) != $white ||
imagesetpixel($im, $x + $i – 1, $y + $j, $outer);
                imagecolorat ($im_tmp, $i + 1, $j) != $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($im_tmp);
}

//用法示例:
header(“content-type: image/png”);
$im = imagecreatefromjpeg(“bluesky.jpg”);
$white = imagecolorallocate($im, 255,255,255);
imagetextouter($im, 9, 10, 20, ‘#000000’, “simsun.ttc”, ‘新禧欢娱’,
‘#ffffff’);
imagetextouter($im, 2, 10, 30, ‘#ffff00’, “”, ‘hello, world!’ ,
‘#美高梅开户网址,103993’);
imagepng($im);
imagedestroy($im);
?>

盼望本文所述对我们的PHP程序设计有着支持。

你大概感兴趣的篇章:

  • 用javascript达成图片马普托克后出示并切换
  • 用javascript达成的图片巴尔的摩克后显得并切换Gavin字作用
  • 团结用jQuery写了一个图形的塞内加尔达喀尔克未有效果
  • php实现图片部分打奥兰多克的办法
  • C语言实现对bmp格式图片打码

发表评论

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

网站地图xml地图