php 上传图片并生成缩略图,PHP 图片上传类并生成缩略图

/**

* 上传图片

*/

class imgUpload{

static protected $a;

protected $formName; //表单名称

protected $directory; //文件上传至目录

protected $maxSize; //最大文件上传大小

protected $canUpload; //是否可以上传

protected $doUpFile; //上传的文件名

protected $sm_File; //缩略图名称

private function __construct($_formName='file', $_directory='./images/uploads/', $_maxSize=1048576){ //1024*1024=1M

//初始化参数

$this->formName = $_formName;

$this->directory = $_directory;

$this->maxSize = $_maxSize;

$this->canUpload = true;

$this->doUpFile = '';

$this->sm_File = '';

}

//判断图片是否属于允许格式内

static public function Type($_formName='file'){

$_type = $_FILES[$_formName]['type'];

switch ($_type){

case 'image/gif':

if (self::$a==NULL)

self::$a = new imgUpload($_formName);

break;

case 'image/pjpeg':

if (self::$a==NULL)

self::$a = new imgUpload($_formName);

break;

case 'image/x-png':

if (self::$a==NULL)

self::$a = new imgUpload($_formName);

break;

default:

self::$a = false;

}

return self::$a;

}

//获取文件大小

public function getSize($_format='K'){

if ($this->canUpload) {

if (0 == $_FILES[$this->formName]['size']) {

$this->canUpload = false;

return $this->canUpload;

break;

}

switch ($_format){

case 'B':

return $_FILES[$this->formName]['size'];

break;

case 'K':

return round($_FILES[$this->formName]['size'] / 1024);

break;

case 'M':

return round($_FILES[$this->formName]['size'] / (1024*1024),2);

break;

}

}

}

//获取文件类型

public function getExt(){

if ($this->canUpload) {

$_name = $_FILES[$this->formName]['name'];

$_nameArr = explode('.',$_name);

$_count = count($_nameArr)-1;

}

return $_nameArr[$_count];

}

//获取文件名称

public function getName(){

if ($this->canUpload) {

return $_FILES[$this->formName]['name'];

}

}

//新建文件名

public function newName(){

return date('YmdHis').rand(0,9);

}

//上传文件

public function upload(){

if ($this->canUpload)

{

$_getSize = $this->getSize('B');

if (!$_getSize)

{

return $_getSize;

break;

}

else

{

$_newName = $this->newName();

$_ext = $this->getExt();

$_doUpload = move_uploaded_file($_FILES[$this->formName]['tmp_name'], $this->directory.$_newName.".".$_ext);

if ($_doUpload)

{

$this->doUpFile = $_newName;

}

return $_doUpload;

}

}

}

//创建缩略图

public function thumb($_dstChar='_m', $_max_len=320){ //$_dstChar:_m , _s

if ($this->canUpload && $this->doUpFile != "") {

$_ext = $this->getExt();

$_srcImage = $this->directory.$this->doUpFile.".".$_ext;

//得到图片信息数组

$_date = getimagesize($_srcImage, &$info);

$src_w = $_date[0]; //源图片宽

$src_h = $_date[1]; //源图片高

$src_max_len = max($src_w, $src_h); //求得长边

$src_min_len = min($src_w, $src_h); //求得短边

$dst_w = ''; //目标图片宽

$dst_h = ''; //目标图片高

//宽高按比例缩放,最长边不大于$_max_len

if ($src_max_len>$_max_len)

{

$percent = $src_min_len / $src_max_len;

if ($src_w == $src_max_len)

{

$dst_w = $_max_len;

$dst_h = $percent * $dst_w;

}

else

{

$dst_h = $_max_len;

$dst_w = $percent * $dst_h;

}

}

else

{

$dst_w = $src_w;

$dst_h = $src_h;

}

//建立缩略图时,源图片的位置

$src_x = '';

$src_y = '';

//判断如果缩略图用于logo,将对其进行裁减

if ('s_' == $_dstChar) {

$src_x = $src_w * 0.10;

$src_y = $src_h * 0.10;

$src_w *= 0.8;

$src_h *= 0.8;

}

//判断图片类型并创建对应新图片

switch ($_date[2]){

case 1:

$src_im = imagecreatefromgif($_srcImage);

break;

case 2:

$src_im = imagecreatefromjpeg($_srcImage);

break;

case 3:

$src_im = imagecreatefrompng($_srcImage);

break;

case 8:

$src_im = imagecreatefromwbmp($_srcImage);

break;

}

//创建一幅新图像

if ($_date[2]==1) { //gif无法应用imagecreatetruecolor

$dst_im = imagecreate($dst_w, $dst_h);

}else {

$dst_im = imagecreatetruecolor($dst_w, $dst_h);

}

//对这副图像进行缩略图copy

// $bg = imagecolorallocate($dst_im,255,255,0);

imagecopyresized($dst_im,$src_im, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h );

//对图片进行抗锯齿操作

imageantialias($dst_im, true);

switch ($_date[2]) {

case 1:

$cr = imagegif($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);

break;

case 2:

$cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);

break;

case 3://imagepng有问题,所以在这里用imagejpg代替

$cr = imagejpeg($dst_im, $this->directory.$this->doUpFile.$_dstChar.".".$_ext, 100);

break;

}

// $cr = imagejpeg($dst_im, $this->directory.$_dstChar.$this->doUpFile, 90);

if ($cr) {

$this->sm_File = $this->directory.$this->doUpFile.$_dstChar.".".$_ext;

return $this->sm_File;

}else {

return false;

}

}

imagedestroy($dst_im);

imagedestroy($cr);

}

//得到上传后的文件名

public function getUpFile(){

if ($this->doUpFile!='') {

$_ext = $this->getExt();

return $this->doUpFile.".".$_ext;

}else {

return false;

}

}

//得到上传后的文件全路径

public function getFilePatch(){

if ($this->doUpFile!='') {

$_ext = $this->getExt();

return $this->directory.$this->doUpFile.".".$_ext;

}else {

return false;

}

}

//得到缩略图文件全路径

public function getThumb(){

if ($this->sm_File!='') {

return $this->sm_File;

}else {

return false;

}

}

//得到上传文件的路径

public function getDirectory(){

if ($this->directory!='') {

return $this->directory;

}else {

return false;

}

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值