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;

}