加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-26 14:54:02 所属栏目:PHP 来源:互联网
导读:PHP 图片上传并生成缩略图类

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

<?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,0);
                        imagecopyresized($dst_im,$src_im,$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,100);
                                        break;
                                case 3://imagepng有问题,所以在这里用imagejpg代替
                                        $cr = imagejpeg($dst_im,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;
                }
        }
}
?>

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读