PHP[OOP入门]PH05-文件上传类、水印缩放类
该部分为 php 面向对象的入门部分,较为肤浅且参杂过分已经不是主流的知识。
这是我早期的 php 学习笔记,php 的学习版本版本是 5.6、7,🐟2020/05/06年从有道笔记导出至此。
day05-文件上传类、水印缩放类
1、文件上传类
form表单注意事项:
post enctype = 'multipart/form-data'
<input type='file' name='f'>
$_FILES['f']
类设计:
成员属性
上传路径
允许的后缀
允许mime
允许的大小
是否启用随机名字
前缀 up_ water_ sf_
错误号码
错误信息
//将下面的信息保存起来,方便其他的函数使用而已
原文件名
原文件后缀
原文件大小
原文件的mime
文件临时路径
成员方法
uploadFile($key)
上传错误:
官方错误:123467
自定义错误:-1 -2 -3 -4 -5
上传成功:0
错误信息:
2、水印缩放类(图像类)
100*100
50*50
20*80(图片会变形,不变形)
类的设计:
成员属性
保存路径
是否启用随机名字
保存格式
成员方法
水印(水印图片,源图片,位置, 透明度, 前缀) water_
缩放(源图片, 宽度, 高度, 前缀) sf_
protected function kidOfImage($srcImg, $size, $imgInfo)
{
//传入新的尺寸,创建一个指定尺寸的图片
$newImg = imagecreatetruecolor($size['old_w'], $size['old_h']);
//定义透明色
$otsc = imagecolortransparent($srcImg);
if ($otsc >= 0) {
//取得透明色
$transparentcolor = imagecolorsforindex($srcImg, $otsc);
//创建透明色
$newtransparentcolor = imagecolorallocate(
$newImg,
$transparentcolor['red'],
$transparentcolor['green'],
$transparentcolor['blue']
);
} else {
//将黑色作为透明色,因为创建图像后在第一次分配颜色时背景默认为黑色
$newtransparentcolor = imagecolorallocate($newImg, 0, 0, 0);
}
//背景填充透明
imagefill( $newImg, 0, 0, $newtransparentcolor);
imagecolortransparent($newImg, $newtransparentcolor);
imagecopyresampled( $newImg, $srcImg, $size['x'], $size['y'], 0, 0, $size["new_w"], $size["new_h"], $imgInfo["width"], $imgInfo["height"] );
return $newImg;
}
/*
$width:最终缩放的宽度
$height:最终缩放的高度
$imgInfo:原始图片的宽度和高度
*/
protected function getNewSize($width, $height, $imgInfo)
{
$size['old_w'] = $width;
$size['old_h'] = $height;
$scaleWidth = $width / $imgInfo['width'];
$scaleHeight = $height / $imgInfo['height'];
$scaleFinal = min($scaleWidth, $scaleHeight);
$size['new_w'] = round($imgInfo['width'] * $scaleFinal);
$size['new_h'] = round($imgInfo['height'] * $scaleFinal);
if ($scaleWidth < $scaleHeight) {
$size['x'] = 0;
$size['y'] = round(abs($size['new_h'] - $height) / 2);
} else {
$size['y'] = 0;
$size['x'] = round(abs($size['new_w'] - $width) / 2);
}
return $size;
}