GD图像处理应用案例
验证码的实现
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
图片验证码:计算机将拿到的验证码存放图片中,让用户看到然后识别,然后提交给服务器,服务器再根据用户提交的和服务器之前生成的进行比较。
1)实现验证码图片的展示
a、生存图片资源:背景色设定
b、写入文字:imagestring写的效果一般,所以一般可以使用imagettftext
c、输出图片给浏览器
d、关闭资源
2)实现验证码文字的随机变化:有一串文字可以随机选择
a、制作目标字符串集:从哪里选内容
b、如何随机从字符串中取出对应的汉字:汉字在utf-8字符集中一个字占用3个字节,英文字母只占1个字节:确定字符数
c、随机取出对应的字符(中文汉字)
d、将取到的字符放到指定的图片位置
3)实现验证码文字颜色的随机变化
每次产生不同的颜色
4)实现验证码背景或干扰噪点
增加一些额外的不影响用户看但是会产生模糊效果的内容(点或者线)
a、增加干扰点
b、增加干扰线
5)实现点击刷新验证码功能:实现验证码在浏览器显示的功能
a、创建一个表单文件,里面有一个img标签文件
b、实现点击更换验证码:让src重新请求PHP脚本,产生一张新图片。因此需要给img标签增加一个点击事件:img的src是否从新发起请求却决于浏览器;浏览器是否发起请求取决于src是否改变
缩略图实现
1)制作图片缩略图的原理
缩略图:将原图得到一个较小的图(尺寸上)
原理:将原图打开,然后放到另一个较小的图片资源中,最后保存
2)实现固定宽高的缩略图
a、得到一张原图资源
b、得到一个缩略图资源(较小)
c、图片采样复制:GD提供了一个函数
imagecopyresampled(缩略图资源,原图资源,缩略图开始放的位置X,Y,原图采样X,Y,缩略图存放宽,高,原图采样宽,高)
d、保存缩略图
e、销毁所有资源(原图和缩略图)
3)实现等比例缩放的固定宽或高的缩略图
优点:图片不会变形
缺点:缩略图有些部分需要进行额外填充(白色填充:补白)
等比例缩略图与固定缩略图的制作区别:在于需要通过计算来得出缩略图的宽和高
算法原理:
1、计算缩略图宽高比
2、计算原图宽高比
3、比较:如果缩略图宽高大于原图宽高比,将缩略图用原图尽可能填满:缩略图的高是完整的,宽度不够(补白);如果缩略图宽高比小于原图宽高比,将缩略图中用原图的宽尽可能填满:缩略图的宽是完整的,高度不够。
4、将图片放到缩略图中间
水印图的实现
水印图:Watermark在某个图片上增加一个透明的印记(马赛克)
1)制作图片水印图的原理
水印图制作原理:将一个带有明显标志的图片放到另外一张需要处理的图片上
a、获取原图资源(需要放上水印图)
b、获取水印图资源
c、合并图片(把水印图合并到目标图上)
d、保存输出
e、清楚资源
2)实现固定位置的水印图:左上角
a、获取原图资源(需要放上水印图)
b、获取水印图资源
c、合并图片(把水印图合并到目标图上)
imagecopymerge(目标资源,水印资源,目标起始X,Y,水印起始X,Y,目标宽,高,透明度)
d、保存输出
e、清楚资源