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.销毁资源