15.处理图像(案例:验证码+缩略图+加载系统字体+加载已有的图片)

在PHP5中的php.ini文件中包含了GD扩展包,只需要取代平GD扩展包的相应注释就可以正常使用。

PHP5包含的GD库正是升级的GD2库,其中包含了支持真彩图像处理的有用的JPG功能,

   生成的图形,通过PHP的文档格式进行存放,还可以通过HTML的图片插入方式SRC来获取动态图形。

简单的,如验证码、水印、微缩图。


1、创建图像

一般情况下,生成的图像可以是png、jpg、gif、bmp、jpeg、wbmp

一般流程如下:

(1)设定标头header,即告诉浏览器要生成的MIME类型

(2)创建一个图像区域,以后的操作都基于该图像区域;

(3)在空白图像区域绘制填充背景;

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

(5)输出最终图形

(6)清除所有的资源;

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

案例1:demo1.php,表示创建一个图像的基本流程,如下——

<?php

//第一步,设置文件MIME类型,输出类型text/html类型是网页类型,默认可以不写
//将输出类型改为图像流
//header('Content-Type:image/wbmp;');  //自动保存
header('Content-Type:image/png;');   //不会自动保存

//第二步,创建一个图形区域,即图像背景
//有两种创建方式
//1、imagecreate——新建一个基于调色的图像,对于资源类型,一般要加上@符号,防止出错
//imagecreate(200, 200);
//2、imagecreatetruecolor(200,200);
//该函数创建了一个图像区域,当没有进行填充的时候,默认的是一个黑色区域。
//返回的是一个资源句柄
$im=imagecreatetruecolor(200, 200);


//第三步,在空白图像区域,绘制颜色、文字、线条等
//填充色换掉,首先必须有个颜色填充器
//imagecolorallocate——为一副图像分配颜色
$blue=imagecolorallocate($im, 0, 102, 255);
//将这个blue颜色填充到背景上去;
//函数imagefill——区域填充
imagefill($im, 0, 0, $blue);

//第四步,在蓝色的背景上输入一些线条、文字等
$white=imagecolorallocate($im, 255, 255, 255);
//imageline———画一条线段
imageline($im, 0, 0, 200, 200, $white);
imageline($im, 200, 0, 0, 200, $white);
//imagestring———水平的画一行字符串
imagestring($im, 5, 80, 20, 'Mr.Lee', $white);


//第五步,输出最终图形;
imagepng($im);

//第六步,将所有的资源清空;
imagedestroy($im);
?>


案例2:demo2.php,表示在其他位置加载demo1.php创建的图像的方式

<?php
//src可以插入各种类型的图片
//demo1.php其实就是一张png图片
header('Content-Type:text/html;charset=gbk');

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


2、简单的小案例

(1)简单的验证码

a、思想——

   首先,创建一个图像,作为背景,见1中的demo1.php,

   其次,再利用for循环,“随机数”产生一个随机的四位数,

例如——“echo mt_rand(0, 100);

(注意:该四位数原理是把一个十进制的数,转换为一个十六进制的数,以“字母a-f + 数字0-9”表示)

将十进制转为十六进制—— dechex()  

    最后,再调整随机数在图像的位置,进行居中。

案例2-1:简单的验证码

<?php
//简单的验证码

//随机数
//echo mt_rand(0, 100);

//为什么要循环0-15之间的数字for
//因为要实现最简单的字母和数字的混搭;

//16进制——0-9  a—f
//将10进制转换为16进制的函数——dechex()

//创建一个四位数的验证码
for ($i=0;$i<4;$i++){
    $nmsg .=dechex(mt_rand(0, 15));//表示产生一个0-15的随机数,并将10进制转为16进制
}

//设置MIME类型;
header('Content-Type:image/png');

//创建一个背景区域;
$im=imagecreatetruecolor(75, 25);

//在空白区域绘制图像、文字
//绘制颜色填充器
$blue=imagecolorallocate($im, 0, 105, 255);
$white=imagecolorallocate($im, 255, 255, 255);

//imagefill填充背景
imagefill($im, 0, 0, $blue);

//imagestring填充字符串
imagestring($im, 5, 20, 4, $nmsg, $white);

//imagepng
imagepng($im);

//销毁图片;
imagedestroy($im);

?>

(2)加载已有的图像

a、设置MIME格式为“image/png”或“image/jpeg”

b、利用魔法常量“_FILE_”

c、新建一个图像imagecrateformpng()

案例2-2:

<?php
define('_DIR_', dirname(_FILE_).'\\');

//加载已有的图像;
header('Content-Type:image/png');

//imagecreateformpng——从png文件或url中新建一个图像
//用image载入图像,是可以进行编辑的;
//在载入图像中,加入水印

//通过魔法常量_FILE_
//echo dirname(_FIFE_);

$im=imagecreateformpng(_DIR_.'');
$white=imagecolorallocate($im, 255, 255, 255);
imagestring($im, 5, 10, 10, 'http://www.csdn.net/zxy', $white);

imagepng($im);
imagedestroy($im);
?>

(3)加载已有的系统字体

a、设置字体iconv();

b、采用系统字体文件并设置其样式,即imagettftext()

案例2-3:

<?php

define('_DIR_', dirname(_FILE_).'\\');
//加载已有的图像;
header('Content-Type:image/png');
//从PNG文件或url新建一个图像;
$im=imagecreateformpng(_DIR_.'m.png');
$white=imagecolorallocate($im, 255, 255, 255);
//字体文件;
$text=iconv('gbk','utf-8','陆海华');
//font字体必须支持中文;
$font='C:\author\s';
//采用系统提供的字体
//第二个参数为字体的大小,第三个参数为旋转的角度,第四五个参数为x、y值;
imagettftext($im, 40, 30, 50, 100, $white, $font, 'hello');

imagepng($im);
imagedestroy($im);

?>


(4)缩略图

所谓的缩略图,即不仅表面的大小改变了,且其容量也改变了。

a、getimagesize()表示取得图像的大小

b、list()函数表示取得原图的长度和高度

c、imagecreateformjpeg()将原图复制到新图上

d、imagecopyresampled()表示将原图重新采样,复制到新图上去。

案例2-4:缩略图

<?php

//微缩图,不但表面的大小改变了,其次容量也改变了;
//是真的改变了,而不是表面的缩小;
define('_DIR_', dirname(__FILE__).'\\');
//header('Content-Type:image/png');
header('Content-Type:image/jpeg');

//getimagesize——取得图像的大小;
//获得原图的长度和高度——list();
//list($width,$height)=getimagesize(_DIR_.'m.png');
list($width,$height)=getimagesize(_DIR_.'m.jpg');

//将原图缩放成40%;
$_width=$width*0.4;
$_height=$heught*0.4;

//创建一个新图;
$im=imagecreatetruecolor($_width, $_height);

//下面的工作是,载入新图,将原图复制到新图上去;
//载入原图;
//1.png
//$_im=imagecreatefrompng(_DIR_.'m.png');
//2.jpeg
$_im=imagecreatefromjpeg(_DIR_.'m.jpg');


//将原图重新采样,拷贝到原图上去,
//imagecopyresampled——重新采样拷贝部分图像并调整大小;
imagecopyresampled($im, $_im, 0, 0, 0, 0, $_width, $_height, $width, $height);

//将新图输出;
//1.imagepng(),全部为高清图片。
//imagepng($im);
//2.imagejpeg()第二个参数不需要,直接null过度,第三个参数是0-100来调节jpg的清晰度。
imagejpeg($im,null,100);

//销毁;
imagedestroy($im);
imagedestroy($_im);
?>

解析——png、jpeg区别

(1)png表示“.php”文件,且全部高清

(2)jpeg表示的图像文件有清晰度可言

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值