美文网首页
GD库使用

GD库使用

作者: 宸风如苏 | 来源:发表于2018-08-05 21:09 被阅读0次

定义:GD库提供了一系列用来处理图片的API ,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

使用步骤(phpstudy中使用):

先确认扩展包是否存在(ext目录下是否存在),不存在就去 pecl 下载

然后只需要在php.ini配置文件中开启GD扩展即可使用image开头的函数。

extension=php_gd2.dll            解开此句注释即可

具体使用:

1:创建最简单的图片
$img=imagecreate(200,100);              //创建图片,默认背景无色
imagecolorallocate($img,255,0,0);       //给图片分配颜色
header('content-type:image/png');   //告知浏览器通过png格式解析图片
imagepng($img);                     //将图片以png格式输出
imagedestroy($img);                 //销毁图片资源

1、  imagegif():将图片资源以gif格式输出
2、  imagejpeg():将图片资源以jpg格式输出
imagepng($img,'路径');          //保存图片
注:保存图片前面不能添加“header('content-type:image/png')”这句代码。
2:画圆弧
bool imagearc(图片资源,原点x,原点y,宽度,高度,起始角度,结束角度,颜色)
$img=imagecreate(200,100);        //创建图片,默认背景无色
imagecolorallocate($img,255,0,0);       //给图片分配颜色
$color=imagecolorallocate($img,255,255,255); //前景色
imagearc($img,100,50,100,100,0,360,$color);   //正圆
header('content-type:image/png');   //告知浏览器通过png格式解析图片
imagepng($img);              //将图片以png格式输出 
3:画直线
bool imageline(图片资源$img,起始点x,起始点y,结束点x,结束点y,颜色)
$img=imagecreate(200,100);        //创建图片,默认背景无色
imagecolorallocate($img,255,0,0);       //给图片分配颜色
$color=imagecolorallocate($img,255,255,255); //前景色
imageline($img,50,20,150,80,$color);   //直线
header('content-type:image/png');   //告知浏览器通过png格式解析图片
imagepng($img);              //将图片以png格式输出 
4:画矩形
bool imagerectangle(图片资源$img,左上点x,左上点y,右下点x,右下点y,颜色)
$img=imagecreate(200,100);        //创建图片,默认背景无色
imagecolorallocate($img,255,0,0);       //给图片分配颜色
$color=imagecolorallocate($img,255,255,255); //前景色
imagerectangle($img,50,30,180,80,$color);   //矩形
header('content-type:image/png');   //告知浏览器通过png格式解析图片
imagepng($img);              //将图片以png格式输出 
5:验证码制作
用到的函数:
imagesx()            // 获取图片宽度
imagesy()            // 获取图片高度
imagefontwidth()     // 获取字体的宽度
imagefontheight()    // 获取字符高度
imagestring($img,字体,起始位置x,起始位置y,字符串,颜色)

验证码(数字字母型)代码:

$array=array_merge(range('a','z'),range('A','Z'),range(0,9)); //拼接多个数组
$array1=array_rand($array,6);  //从数组中随机抽取6个元素,注意,这里取出的是元素对应下标
shuffle($array1);        //打乱数组
$str='';
foreach($array1 as $k){
   $str.=$array[$k];
};
$img=imagecreate(300,200);     //创建画布
imagecolorallocate($img,0,0,200);
$color=imagecolorallocate($img,255,255,255);
$font=5;
$x=(imagesx($img)-imagefontwidth($font)*strlen($str))/2;
$y=(imagesy($img)-imagefontheight($font))/2;
imagestring($img,$font,$x,$y,$str,$color);
header('content-type:image/png');
imagepng($img);

中文验证码代码:

$array=['你','是','猪','狗','牛','羊','鸡','龙','虎'];
$index=array_rand($array,4);
shuffle($index);
$str='';
foreach($index as $k){
    $str.=$index[$k];
};
$img=imagecreate(400,300);
imagecolorallocate($img,30,100,109);
$color=imagecolorallocate($img,255,255,255);
$font=20;
$angle=10;
$fontfile='./ttf/simsun.ttc';
$info=imagettfbbox($font,$angle,$fontfile,$str);
$x=(imagesx($img)-($info[4]-$info[6]))/2;
$y=(imagesy($img)+($info[4]-$info[7]))/2;
imagettftext($img,$size,$angle,$x,$y,$color,$fontfile,$str);
header('content-type:image/jpeg');
imagejpeg($img);

打开图片创建验证码:
只需要将自己创建图片资源img用以下方式获得img。

    imagecreatefromjpeg(图片路径):打开jpg图片创建资源
    imagecreatefrompng(图片路径): 打开png图片创建资源
    imagecreatefromgif(图片路径): 打开gif图片创建资源
<?php
//第一步,生成随机字符串
$array=array_merge(range('a','z'),range('A','Z'),range(0,9));
$index=array_rand($array,4);  //随机取出4个字符,返回的是字符的下标
shuffle($index);    //打乱数组
$str='';    //拼接随机字符串
foreach($index as $i){
$str.=$array[$i];
}
//第二步:打开图片创建资源(随机抽取五张中的一张)
$path='./captcha/captcha_bg'.rand(1,5).'jpg';
$img=imagecreatefromjpeg($path);
//第三步
//将字符串写在图片上
$color=imagecolorallocate($img,255,255,255);     //白色
if(rand(1,2)==1)
$color=imagecolorallocate($img,0,0,0);    //黑色
$font=5;
//实现字符的居中
$x=(imagesx($img)-(imagefontwidth($font)*strlen($str)))/2;  //水平居中
$y=(imagesy($img)-(imagefontheight($font))/2;    //垂直居中
imagestring($img,$font,$x,$y,$str,$color);
//输出
header('content-type:image/png');    //告知浏览器以png格式进行解析
imagepng($img);     //以png格式输出
6:添加文字水印
<?php 
$str='我是一头猪';
//打开图片
$path='./images/face.jpg';
$img=imagecreatefromjpeg($path);
//计算字符串的范围
$size=40;    //字号
$angle=0;   //角度
$fontfile='./ttf/simhei.ttf';    //字体路径
$info=imagettfbbox($size,$angle,$fontfile,$str);   //返回文本范围
$x=imagesx($img)-($info[4]-$info[6]);    //起点X坐标
$y=imagesy($img)-10;    //起始点Y坐标
//第四步:将字符串写在图片上
$color=imagecolorallocate($img,255,0,0);
imagettftext($img,$size,$angle,$x,$y,$color,$fontfile,$str);
//输出
header('content-type:image/jpeg');
imagejpeg($img);
7:添加图片水印
//将源图拷贝到目标图上
imagecopy($dst_img,$src_img,$dst_x,$dst_y,0,0,$src_w,$src_h);
//显示
header('content-type:image/png');
imagepng($dst_img); 
8:生成缩略图、裁切图片

知识点

imagecopyresampled():   拷贝图片变调整尺寸
imagecreatetruecolor():   创建真彩色的图像
imagecopyresampled();     重采样拷贝部分图像并调整大小

问题:imagecreate()和imagecreatetruecolor()区别?
      Imagecreate()创建的图片支持256种颜色,没有背景。
      Imagecreatetruecolor()创建图片支持2563种颜色,黑色背景。

代码实现

//制作缩略图
$dst_img=imagecreatetruecolor(300,300);     //创建目标图
$src_img=imagecreatefromjpeg('./images/4.jpg');  //创建源图资源
$src_w=imagesx($src_img);
$src_h=imagesy($src_img);
imagecopyresampled($dst_img,$src_img,0,0,0,0,300,300,$src_w,$src_h);
imagepng($dst_img,'./images/small.png');

//裁切
$dst_img=imagecreatetruecolor(300,300);     //创建目标图
$src_img=imagecreatefromjpeg('./images/4.jpg');  //创建源图资源
imagecopyresampled($dst_img,$src_img,0,0,160,75,300,300,300,300);
imagepng($dst_img,'./images/small02.png');
9:GD库改错思路

如果图片无法显示
第一招:注释掉header()函数再测试(注释掉之后,错误信息就会显示);
第二招:如果注释掉以后没有报错,看图片代码前面是否有其他字符的存在,如有就删除。
第三招:如果看不到字符,检查源码
第四招:如果上面都不管用,在header()前面添加ob_clear();

相关文章

  • PHP常见面试题(二)

    1.GD库是做什么用的? 答:GD库,是PHP处理图形的扩展库。GD库提供了一系列用来处理图片的API,使用GD库...

  • PHP GD库与Imagick库简单使用及区别

    目前主流的PHP项目目前使用的是GD库来处理图片 由于GD库性能与Imagick相比,性能低下,并且GD库在处理大...

  • php拓展库

    一、gd库是php处理图形的扩展库,使用GD库可以处理图片或者生成图片。 1 网站上常用GD库生成缩略图 2 对图...

  • PHP使用GD库生成验证码图片,实现图片验证

    本文记录从php 下载配置GD图片生成库 到使用该库生成验证码图片,网页上实现验证码。使用技术:php使用GD库绘...

  • GD库使用

    定义:GD库提供了一系列用来处理图片的API ,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩...

  • GD库是做什么用

    GD库提供一系列用来处理图片的API,使用GD库可以处理图片。或者生成图片。在网站上GD库通常用来生成缩略图或者用...

  • PHP学习笔记 - 进阶篇(9)

    图形图像操作 GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库...

  • PHP 图形图像操作

    GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列A...

  • 图形图像操作

    PHP图形操作之GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD...

  • GD实战开发验证码

    GD GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,在网站上GD库通常用来生成缩略图,或...

网友评论

      本文标题:GD库使用

      本文链接:https://www.haomeiwen.com/subject/nnczmftx.html