PHP[入门]P20-图像处理
这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。
图像处理
准备工作:
MIME:互联网邮件扩展类型
服务器会告诉浏览器当前返回的文件类型,当浏览器获取到content-type文件类型 就会自动按照类型打开文件
header('location:');
header('content-type:text/css');
常见的mime类型:
HTML JavaScript css
image/png image/jpeg image/gif
图像后缀:
png jpg jpeg gif bmp wbmp
打开支持的相对应的扩展库php.ini
修改配置文件:
扩展库所在的目录:extension_dir ="E:/wamp64/bin/php/php7.0.0/ext/"
1.如果是wampsever : 在小绿那->php->php extension 前边有对勾的就是支持的,
直接选择 之后会自动重启
2.修改配置文件:eg:打开gd2扩展库
extension=php_gd2.dll 将分号去掉 ,加上分好就是注释掉
如果还是没有支持相对应的扩展:
去扩展库文件目录,找对应.dll文件 如果没有去官网下载或者拷贝别的地方的.dll
---
GD库处理图像:
经常的使用的场景:
验证码 水印 缩放 数据图 .....
六脉神剑:
1.创建画布
imagecreatetruecolor()
2.准备颜色
imagecolorallocate()
3.图像的处理
imagefill
4.设置header 头
header('content-type:image/png');
5.保存/发送图像
imagepng()
6.关闭/释放资源
imagedestroy($img);
-----------
函数:
imagecreate:创建画布 推荐使用
imagecreatetruecolor(width, height); 返回值 资源
--使用图片
imagecreatefromjpeg('meinv.jpg');
imagecreatefrompng();
imagecreatefromgif();
准备颜色
imagecolorallocate()
填充背景颜色
imagefill()
imagefilledarc($img, 100, 100, 100, 100, 0, 360, $color3, IMG_ARC_PIE);//填充的是圆
imagefilledarc($img, 300, 200, 80, 100, 50, 180, $color3,IMG_ARC_CHORD); 弧度变成直线链接 (出来的是个三角形)
保存图像
imagepng($img, [path/filename]);
imagegif()
imagejpeg()
图像处理:
imagesetpixel($img, 100, 100, $color3); 画一个单一像素点
imageline($img, 0, 0, 500, 400, $color1); 画一条线
// imagerectangle($img, 100, 100, 200, 300, $color1);//画一个矩形 两点可以确定一个矩形
imagefilledrectangle($img, 100, 100, 200, 300, $color1);
// imagepolygon($img, [300, 100, 320, 150, 200, 200, 100, 200 ], 4, $color3); 多边形
imagefilledpolygon($img, [300, 100, 320, 150, 200, 200, 100, 200 ], 4, $color3);
--
字符:
imagechar($img, 5, 400, 50, 'A', $color3);水平的画一个字符
imagechar($img, 5, 400, 50, 'A', $color3);
imagestring($img, 5, 400, 100, 'ABCD', $color3);//水平的画一行字符 (不能是中文)
imagefttext($img, 50,10, 100, 100, $color1, 'STXINGKA.ttf', '明天就是情人节');// 资源,字体的大小,倾斜的角度,开始的位置,color,ttf, string,
-----获取指定图片的宽 高
getimagesize('图片名'); 返回值是数组 下标0 的是宽,1的是高
list($width, $height) = getimagesize('filename');
imagecopymerge($img, $imgto, 100, 100, 0, 0, 100, 100, 30);//拷贝图像中的一部分,设置透明程度
参数:作为画布的原始图,拷贝的图,起始位置, 拷贝图的起始位置, 拷贝图像的宽,高,0-100透明程度
imagecopy($img, $imgto, 100, 100, 0, 0, 100, 100);
---------------------
验证码思路:
1.创建画布指定宽和高(写成一函数,传宽跟高);
2.随机产生的字符串
3.画布随机填充浅色的背景
4.画布上增加上干扰元素(随机产生点,线,弧线的位置,随机的是产生元素的位置)
5.把验证码字符串写上
6.设置header头
7.发送
8.销毁资源