水印,缩放裁剪,文件和目录。

水印

补充了一点昨天那些相关函数的部分说明,不过相关补充写入了昨天的日志里,内容分割开的话可能队以后的阅读造成影响,故不单独列出来了。

文字水印

<?php
header('Content-type:image/jpeg');
$img = imagecreatefromjpeg('/phpstudy_pro/WWW/51CTO_Study/D01/Verification_Code/images/c01.jpg');
$color6 = imagecolorallocate($img, 200, 200, 200);

$width = imagesx($img);
$height = imagesy($img);
// 字体绝对路径(推荐)
// 当你相对路径看不到效果时,就使用绝对路径吧
$fontfile = "Captcha_module/font/CangJiGaoDeGuoMiaoHei/CangJiGaoDeGuoMiaoHei-CJgaodeguomh-2.ttf";
$str_all = "CSDN@SYW_SEC";

// 获取字体高度和宽度
$str_array = imagettfbbox(15, 0, $fontfile, "CSDN@SYW_SEC");
$strw = abs($str_array[0] - $str_array[2]);
$strh = abs($str_array[3] - $str_array[5]);
// echo $strw . " - " . $strh;

imagettftext($img, 15, 0, ($width - $strw - 10), ($height - $strh), $color6, $fontfile, $str_all);

imagejpeg($img);
imagedestroy($img);

img

图片水印

<?php
header('Content-type:image/jpeg');
// 大图资源(目标资源)
$img = imagecreatefromjpeg("Verification_Code/images/c01.jpg");
$color1 = imagecolorallocate($img, 200, 200, 200);

// 水印图片
$water = imagecreatefrompng("Verification_Code/images/CSDN_LOGO.png");
// 水印图像宽高
$imgw = imagesx($img);
$imgh = imagesy($img);

// 目标资源的宽高
$waterw = imagesx($water);
$waterh = imagesy($water);

// 不带透明度参数拷贝图片当水印
imagecopy($img, $water, $imgw - $waterw, $imgh - $waterh, 0, 0, $waterw, $waterh);
// 带透明度参数拷贝图片当水印
// imagecopymerge($img, $water, $imgw - $waterw, $imgh - $waterh, 0, 0, $waterw, $waterh, 50);

imagejpeg($img);
imagedestroy($img);

img
img

截取与缩放

截取

<?php
header('Content-type:image/jpeg');
$simg = imagecreatefrompng('images/w2.png');
$eimg = imagecreatetruecolor(500, 500);

imagecopyresampled($eimg, $simg, 100, 100, 0, 0, 200, 200, 200, 200);
// 显示截取的图像
imagejpeg($eimg);
// imagepng($eimg);
// 销毁
imagedestroy($simg);
imagedestroy($eimg);

img

缩略

这种类型的缩放会比原图占用的资源更少。 尺寸变小 ,占用的 容量变小

<?php
header('Content-type:image/jpeg');
// 缩略后的宽
$width = 100;

$simg = imagecreatefrompng('images/w2.png');

$simgw = imagesx($simg);
$simgh = imagesy($simg);

// 通过($width/$height=$simgw/$simgh)的等式算出缩略后的高
$height = $width / ($simgw / $simgh);
// 创建对应的图像资源
$eimg = imagecreatetruecolor($width, $height);

// 开始缩略
imagecopyresampled($eimg, $simg, 0, 0, 0, 0, $width, $height, $simgw, $simgh);
// 显示图像资源
imagejpeg($eimg);
// 销毁
imagedestroy($eimg);

c06

文件和目录

返回的值是布尔值,是则返回true,否则返回false
判断是文件:is_file('文件名或者路径文件名');
判断是目录:is_dir('路径或者路径文件目录');

判断普通文件和目录

file_exists()   // 检查文件或目录是否存在
filesize() // 取得普通文件的大小 单位字节

文件属性

is_readable()   // 判断给定的文件名是否可读
is_writable() // 判断给定的文件名是否可写
filectime() // 获取文件的创建时间
filemtime() // 获取文件的修改时间
fileatime() // 获取文件的上次访问时间
stat() // 获取文件的大部分属性值

目录基本操作

__FILE__:返回当前文件名路径

1.basename(); //返回路径中的文件名部分,有后缀
2.dirname(); //返回路径中的目录部分
3.pathinfo(); //返回文件路径的信息(花式拆解,把文件名和后缀分开,又把文件和路径分开,最终集合为数组)

// 目录系列:目录句柄
4.opendir(); //打开目录句柄(里面放路径,返回资源类型的数据)
5.readdir(); //从目录句柄中读取条目,返回目录中下一个文件的文件名
// 读取.和..后,按字母排序读取下面的文件名。直到读完返回false。

6.rewinddir(); //倒回目录句柄
// 和上面相反,直接回到最初状态

7.closedir(); //关闭目录句柄


8.mkdir('name',权限,bool); //新建目录,权限默认0777;bool为true时,可以进行递归创建目录
9.rmdir(); //删除指定的空目录
10.scandir(); //列出指定路径中的文件和目录
// 这条命令有点类似于windows的dir

文件基本操作

1.fopen()   //打开文件或者 URL
// 详细在007日志里

2.fread() //读取文件(基于fopen产生的变量)
// 读取指定数目的字节数
// 该函数可以写入二进制流和字符串流
// $handle,$length
// $handle 基于fopen产生的资源变量
// $length 读取的字节数(自己规定)

3.fgets() //从文件指针中读取一行
// $handle[,$length]
// 只能读取文件的一行
// 该函数可以写入二进制流和字符串流
// $handle 基于fopen产生的资源变量
// $length 读取的字节数,默认1024


4.feof()//测试文件指针是否到了文件结束的位置
// 到达文件末尾则返回true,否则返回false
// $file :和之前一样,是资源变量。

5.fwrite()//写入文件
// file 必需。规定要写入的打开文件。
// string 必需。规定要写入打开文件的字符串。
// length 可选。规定要写入的最大字节数。

6.rewind()//倒回文件指针的位置
// $file(资源变量)
// 将文件指针的位置倒回文件的开头。
// 如果成功,该函数返回 TRUE。
// 如果失败,则返回 FALSE。

7.flock()//轻便的咨询文件锁定
// 锁定或释放文件。
// 如果成功,该函数返回 TRUE。
// 如果失败,则返回 FALSE
// 参数:
// 参数 描述
// file 必需。规定要锁定或释放的已打开的文件。
// lock 必需。规定要使用哪种锁定类型。
// 可能的值:
// LOCK_SH - 共享锁定(读取的程序)。允许其他进程访问该文件。
// LOCK_EX - 独占锁定(写入的程序)。防止其他进程访问该文件。
// LOCK_UN - 释放一个共享锁定或独占锁定
// LOCK_NB - 锁定的情况下避免阻塞其他进程。
// block 可选。若设置为 1,则当进行锁定时阻塞其他进程。


8.ftruncate()//将文件截断到给定的长度
// 把打开文件截断到指定的长度。
// 如果成功则返回 TRUE
// 如果失败则返回 FALSE。

// file 必需。规定要截断的打开文件。
// size 必需。规定新的文件大小。


9.fclose()//关闭一个已打开的文件指针
// 参数传个打开文件(资源变量)并且关闭

10.file()//把整个文件读入一个数组中
// 把整个文件读入一个数组中。
// 数组中的每个元素都是文件中相应的一行,包括换行符在内。
// 参数 描述
// path 必需。规定要读取的文件。(注意,这个是文件或者文件路径)
// 如果单独只有这个参数,会将文件所有的行读取出来,放入一个列表当中
// include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
// context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。



11.copy()//拷贝文件
// $file1,$file2
// 将$file1复制到$file2

12.unlink()//删除文件
13.file_get_contents()//将整个文件读入一个字符串
// path 必需。规定要读取的文件。
// include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
// context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。
// start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。
// max_length 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。

14.file_put_contents()//将字符串写入文件中
// filename 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
// data 必需。规定要写入文件的数据。可以是字符串、数组或数据流。
// flags 可选。规定如何打开/写入文件。可能的值:
// FILE_USE_INCLUDE_PATH:在搜索路径中查找文件,可以是 PHP 的 include_path 设置的目录。
// FILE_APPEND:追加写入而不是覆盖写入。
// LOCK_EX:写入时锁定文件,可以避免并发写入问题
// 如果锁定未被正确释放(中断,突然退出),可以使用flock()函数释放指定文件的锁定
// context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。


15.rename()//重命名一个文件或目录
// string $oldname , string $newname [, resource $context ]
// 和Linux的mv类似,光看上面的英文就能知道怎么使用了,不再赘述



16.readfile()//读入一个文件并写入到输出缓冲
int readfile(string $filename, bool $use_include_path = false, resource $context = null);
// $filename: 必须,要读取的文件名,该文件必须存在且可读。
// $use_include_path:可选,默认为 false,如果设置为 true,则在查找文件时将搜索 PHP 的 include_path 目录。
// $context: 可选,可用于指定 PHP 上下文中的额外参数,例如打开文件时的文件访问模式和上下文选项。