GD库处理图像

PHP5中,动态图象的处理要比以前容易得多。PHP5php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了。PHP5包含的GD库正是升级的GD2库,其中包含支持真彩图像处理的一些有用的JPG功能。

一般生成的图形,通过PHP的文档格式存放,但可以通过HTML的图片插入方式SRC来直接获取动态图形。比如,验证码、水印、微缩图等。

一.创建图像

创建图像的一般流程:

1).设定标头,告诉浏览器你要生成的MIME类型。

2).创建一个图像区域,以后的操作都将基于此图像区域。

3).在空白图像区域绘制填充背景。

4).在背景上绘制图形轮廓输入文本。

5).输出最终图形。

6).清除所有资源。

7).其他页面调用图像。

  //1 设定标头
  //header("Content-type:text/html;charset=utf-8");  //不写就是默认,默认的是html文档
  header("Content-type:image/png;");
  
  //2 创建一个图形区域,图像背景
  //两种方式
  $im = imagecreatetruecolor(200, 200); //返回的是资源句柄
  
  //3 在空白图像区域绘制填充背景
  //填充颜色换掉,首相要有个颜色填充器
  $blue = imagecolorallocate($im, 0, 102, 255);
  //将颜色填充到背景上去,imagefill();
  imagefill($im, 0, 0, $blue);
  
  //4 在背景上绘制图形轮廓输入文本
  $white = imagecolorallocate($im, 255, 255, 255);
  //画一条线imageline();
  imageline($im, 0, 0, 200, 200, $white);
  imageline($im, 0, 200, 200, 0, $white);
  //绘制文本imagestring();二号字体,x y位置,文本,颜色
  imagestring($im, 5, 70, 20, 'Mr.dang', $white);
  
  //5 输出最终图形
  imagepng($im);  //输出png格式图片

  //6 清空资源
  imagedestroy($im);

7).其他页面调用图像:只需要在另一个php文件调用即可,输出img标签,src写上边创建的图像的文件地址

  //demo2.php
  echo '<img src="demo.php" alt="图形" title="图形" />';

二.简单小案例

1 验证码

/*简单验证码案例  */
  
  //1 获取四位数字字母混编
  //mt_rand();获取随机数
  //dechex();十进制转换为十六进制
  for($i=0;$i<4;++$i){
      $nmsg .= dechex(mt_rand(0, 15));
  }
  
  //2 将上边的变成图片
  header('Content-type:image/png');
  $im = imagecreatetruecolor(75, 25);
  $blue = imagecolorallocate($im, 0, 102, 255);
  $white = imagecolorallocate($im, 255,255,255);
  imagefill($im, 0, 0, $blue);
  imagestring($im, 5, 20, 5, $nmsg, $white);
  imagepng($im);
  imagedestroy($im);

2 加载已有图像:这个图像事先防止于和php文件同一目录下,可以用相对或绝对地址调用,建议用绝对因为更快,我们的示例中用的是绝对,用魔法常量赖实现的

/*加载已有图像  */
//  //
//   define('URL', dirname(__FILE__).'\');
//   header('Content-type:image/png');
//   $im = imagecreatefrompng(URL.'2.png');
//   $white = imagecolorallocate($im, 255, 255, 255);
//   imagestring($im, 5, 10, 10, 'http://www.dang.com', $white);
//   imagepng($im);
//   imagedestroy($im);

3 采用本机系统中的字体

/*采用系统提供字体  */
//   $font = 'C:WindowsFontsmsyh.ttc'; //把路径传进去即可
//   define('URL', dirname(__FILE__).'\');
  
//   header('Content-type:image/png');
//   $im = imagecreatefrompng(URL.'2.png');
//   $white = imagecolorallocate($im, 255, 255, 1);
//   imagettftext($im,40,10,50,100,$white,$font,'hello,党兴明'); //第一个数字字体大小,第二个旋转角度
//   imagepng($im);
//   imagedestroy($im);

4 微缩图

/*微缩图问题  */
  define('URL', dirname(__FILE__).'\');
  header('Content-type:image/png');
  //1 取得图像大小
  list($width,$height) = (getimagesize(URL.'2.png'));  //返回的是数组,里边包含尺寸
  //2 将原图的宽高缩小百分比
  $_width = $width*0.4;
  $_height = $height*0.4;
  
  //3 创建一个新图
  $im = imagecreatetruecolor($_width, $_height);
  
  //4 载入原图,将原图复制到新图上去
  //载入
  $_im = imagecreatefrompng(URL.'2.png');
  //将原图重新采样,拷贝到新图上,最后按0.4的比例输出
  //imagecopyresampled();重新采样拷贝图片并调整大小
  imagecopyresampled($im, $_im, 0, 0, 0, 0, $_width, $_height, $width, $height);
  
  //5 输出销毁
  imagepng($im);
  imagedestroy($im);
  imagedestroy($_im);

注意:以上示例中都用的png格式的图片,可以用其他格式的(只要把函数中的png替换就好)。但jpg在函数中要写jpeg,bmp要写wbmp。

原文地址:https://www.cnblogs.com/by-dxm/p/6155734.html