原生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;
    }
}
?>

 

转载于:https://www.cnblogs.com/wxdindex/p/11265570.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值