php之gd2

一、使用gd2之前首先要开启gd2扩展
Windows下面找到php的配置文件php.ini,搜索extension=php_gd2.dll,去掉前面的分号即可;

函数介绍

由于gd2的函数比较的长,所有对部分函数进行介绍
1.imagecreatetruecolor — 新建一个真彩色图像

imagecreatetruecolor ( int $width , int $height ); //$width图像宽度 $height图像高度

返回值:成功返回图象资源,失败返回 FALSE 。
2.imagecolorallocate — 为一幅图像分配颜色

imagecolorallocate ( resource $image , int $red , int $green , int $blue );

返回值:分配失败则返回 -1。
3.imagecopyresampled — 重采样拷贝部分图像并调整大小

imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h );//$dst_image目标图象连接资源  $src_image源图象连接资源  $dst_x目标X坐标点  $dst_y目标Y坐标点  $src_x源的X坐标点  $src_y源的Y坐标点  $dst_w目标宽度  $dst_h目标高度  $src_w源图象的宽度  $src_h源图象的高度

返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
4.imagecopymerge — 拷贝并合并图像的一部分

imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct );//将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100

5.imagejpeg —将图像输出到浏览器或文件

imagejpeg ( resource $image [, string $filename [, int $quality ]] );//从 image 图像以 filename 为文件名创建一个 JPEG 图像。

返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
6.imagecolorallocatealpha — 为一幅图像分配颜色和透明度

imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha );//透明度参数alpha,其值从0到127。0 表示完全不透明,127 表示完全透明

返回值:颜色标识符或FALSE分配失败。此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。
7.imagettftext — 用TrueType字体向图像写入文本

imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text );//$image画布资源  $size字体大小  $angle旋转角度  $x x轴  $y y轴  $color字体颜色 $fontfile字体文件  $text需要渲染的字符串

返回值:返回一个含有 8 个单元的数组表示了文本外框的四个角,顺序为坐下角,右下角,右上角,左上角。这些点是相对于文本的而和角度无关,因此“左上角”指的是以水平方向看文字时其左上角。
8.imagefill — 区域填充

imagefill ( resource $image , int $x , int $y , int $color );//在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)

9.imagesetpixel — 画一个单一像素

imagesetpixel ( resource $image , int $x , int $y , int $color );//在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点

10.imageline — 画一条线段

imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color );// color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段

11.imagestring — 水平地画一行字符串

imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col );//用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体

12.imagedestroy — 销毁一图像

imagedestroy ( resource $image );

实际应用

一、生成验证码

//向浏览器输出图片头信息
header('Content-type:image/jpeg');
$width = 130;
$height = 50;
$arr = array('1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$string = '';
for ($i = 0; $i < 5; $i++) {
	$string .= $arr[rand(0,count($arr)-1)];
}
//新建一个真彩色图像
$img = imagecreatetruecolor($width, $height);
//为一幅图像分配颜色  
$bgColor = imagecolorallocate($img, rand(200,255), rand(200,255), rand(200,255));
//区域填充
imagefill($img, 0, 0, $bgColor);
//该循环,循环画背景干扰的点
for ($i = 0; $i <= 100; $i++) {
	//点的颜色
    $pointColor = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
    //水平的画一串像素点
    imagesetpixel($img, rand(0,$width-1), rand(0,$height-1), $pointColor);
}
//该循环,循环画干扰直线
for ($i = 0; $i <= 4; $i++) {
	//线的颜色
    $lineColor = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
    //画一条线段
    imageline($img, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $lineColor);
}
$colorString = imagecolorallocate($img, rand(10,100), rand(10,100), rand(10,100));
//1.用TrueType字体向图像写入文本
imagettftext($img,25,7,rand(30,40),rand(35,40),$colorString,'simsun.ttc',$string);
//2.水平地画一行字符串(5是最大的)
//imagestring($img,5,rand(0,$width-36),rand(0,$height-15),$string,$colorString);
//输出图片到浏览器
imagejpeg($img);
//销毁,释放资源
imagedestroy($img);

ps:事先要下载simsun.ttc文件到本地(在win里搜索 字体 就行)。

二、添加文字水印
先准备图片:
在这里插入图片描述
直接上代码:

//要添加文字水印的图片
$srcImg = 'example.jpg';
//如果是某某云的资源链接就用 file_get_contents()先下载到本地再操作
//获取图片信息
$imageInfo = getimagesize($srcImg);
//通过编号获取图像类型
$type = image_type_to_extension($imageInfo[2], false);
//在内存中创建和图像类型一样的图像
$fun = "imagecreatefrom" . $type;
//图片复制到内存
$image = $fun($srcImg);
//设置字体的路径
$font = "simsun.ttc";
//填写水印内容
$content = "武汉加油!";
$text = '中国加油!';
//设置字体颜色和透明度
$color = imagecolorallocatealpha($image, 50, 50, 50, 0);
//写入文字
imagettftext($image, 50, 0, 130, 250, $color, $font, $content);
imagettftext($image, 40, 0, 140, 350, $color, $font, $text);
//浏览器输出
header("Content-type:".$imageInfo['mime']);   //******
$fun = "image" . $type;
//在浏览器中输出图片
$fun($image);  //******
//添加水印之后的图片  图片路径名称
$imgPathName = 'newImage.png';
//保存图片
$fun($image, $imgPathName); 
//销毁图片
imagedestroy($image);

ps:如果不想在浏览器输出就注释带//******的两行
效果:
在这里插入图片描述

三、添加logo水印
先准备材料:
在这里插入图片描述
直接上代码:

/**操作背景图片**/
//背景图片路径
$src = "example.jpg";
//获取图片信息
$info = getimagesize($src);
//通过图片的编号获取获取图片的类型
$type = image_type_to_extension($info[2],false);
//在内存中创建一个和我们图像类型一样的图像
$fun = "imagecreatefrom{$type}";
//把要操作的图片复制到内存中
$image = $fun($src);

/**操作logo**/
//水印路径
$logoImage = "logo.png";
//获取水印图片的类型
$logoInfo = getimagesize($logoImage);
//通过水印图片的编号获取水印图片的类型
$logoType = image_type_to_extension($logoInfo[2],false);
//在内存中创建一个和水印图片一样的图像
$logoFun = "imagecreatefrom{$logoType}";
//把水印图片复制到内存中
$logo = $logoFun($logoImage);

//将两张图片拷贝到一起
imagecopymerge($image, $logo, 300, 280, 0, 0, $logoInfo[0], $logoInfo[1],70);
//销毁水印图片
imagedestroy($logo);
//在浏览器中输出图片
header("Content-Type:".$info['mime']);
$newImgFun = "image{$type}";
$newImgFun($image);
//保存图片
$newImgFun($image,'newImage.jpg'); 
//销毁图片
imagedestroy($image);

效果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值