zoukankan      html  css  js  c++  java
  • 原生PHP实现上传大图片与缩略图

    <?php
    
    class IMG
    {
        public $res;
        public $thumb_path;
    
        /**上传大图
         * @param $name  传上来的图片名
         * @param string $path 保存路径
         * @param string $size 限制的大小
         * @param array $type 允许的图片类型
         * @return mixed
         */
        public function upload($name, $path = '../uploads/', $size = '1048576', $type = array('jpg', 'png', 'jpeg', 'gif'))
        {
            $error = $_FILES[$name]['error'];
            if ($error > 0 || $_FILES[$name]['size'] > $size) {
    
                $this->res['msg'] = '文件超过规定大小,请重新上传';
                $this->res['error'] = 1; //规定1为错误代码
                return $this->res;
            }
            //文件类型判断
            $path_arr = pathinfo($_FILES[$name]['name']);//路径数组
            $ext = $path_arr['extension'];//获取文件的后缀
    
            if (!in_array($ext, $type)) {
                $this->res['msg'] = '文件类型错误,请重新上传';
                $this->res['error'] = 1;
                return $this->res;
            }
            //创建目录
            $tmpdir = date('Y-m-d', time());
            $dir = rtrim($path, '/') . '/' . $tmpdir; //拼接好的路径
    
            //如果目录不存在,则创建
            if (!is_dir($dir)) {
                mkdir($dir, 0777, true);
            }
            //文件名
            $file_name = time() . mt_rand(0, 99999); //时间戳拼接一个随机数作为文件名
            $file = $file_name . '.' . $ext; //文件名拼接后缀(完整文件名)
    
            //保存文件到目录
            $upload = move_uploaded_file($_FILES[$name]['tmp_name'], $dir . '/' . $file);
            if ($upload) {
                $this->res['msg'] = '上传成功';
                $this->res['error'] = 2; //规定上传成功代码为2
                $this->res['path'] = $dir . '/' . $file;
                $this->res['name'] = $file;
                return $this->res;
            }
        }
    
        /**上传缩略图
         * @param $src_addr 大图片地址
         * @param $des_w    要生成的缩略图宽
         * @param $des_h    要生成的缩略图宽
         * @param $path     生成后存放的路径
         * @param $thumb_name   生成后的图片名
         * @return string
         */
        public function thumb($src_addr, $des_w, $des_h, $path, $thumb_name)
        {
            //1. 先获取大图片的信息
            $src_info = getimagesize($src_addr);
            $src_w = $src_info[0]; //原图宽
            $src_h = $src_info[1]; //原图宽
    
            //2. 创建一张新图片,参数(图片路径)作为等下的缩略图
            if ($src_info[2] == 1) {
                $des_img = imagecreatefromgif($src_addr);
            } else if ($src_info[2] == 2) {
                $des_img = imagecreatefromjpeg($src_addr);
            } else if ($src_info[2] == 3) {
                $des_img = imagecreatefrompng($src_addr);
            }
    
            //3. 新建一个真彩色图像,参数(缩略图的宽,高)
            $img_new = imagecreatetruecolor($des_w, $des_h);
    
            //4. 拷贝部分图像并调整大小
            imagecopyresized($img_new, $des_img, 0, 0, 0, 0, $des_w, $des_h, $src_w, $src_h);
    
            //6. 创建缩略图文件存放目录
            $tmpdir = date('Y-m-d', time());
            $dir = rtrim($path, '/') . '/' . $tmpdir; //拼接好的路径
    
            if (!is_dir($dir)) {
                mkdir($dir, 0777, true);
            }
    
            //7. 保存图片
            $this->thumb_path = $dir . '/thumb_' . $thumb_name;
            imagejpeg($img_new, $this->thumb_path, 80);
    
            //8. 释放内存
            imagedestroy($img_new);
            return $this->thumb_path;
        }
    }
    ?>
  • 相关阅读:
    VS2019远程调试
    windows下使用redis-desktop-manager远程连接redis失败问题
    无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53) .
    由于管理员设置的策略,该磁盘处于脱机状态
    window下ping端口tcping
    dos命令远程登陆window server服务器并重启
    大二寒假作业之Android
    大二寒假作业之Android
    大二寒假作业之Android
    大二寒假作业之JavaWeb
  • 原文地址:https://www.cnblogs.com/wxdindex/p/11265570.html
Copyright © 2011-2022 走看看