美文网首页
图片处理类(适用laravel)

图片处理类(适用laravel)

作者: 七百年前 | 来源:发表于2019-05-16 14:30 被阅读0次
<?php

namespace App\Tools;

use Illuminate\Support\Facades\Storage;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

class Images
{

    /**
     * [baseAvatar base64图片流上传]
     * @param  [type] $base64_string [description]
     * @return [type]                [description]
     */
    public static function baseAvatar($base64_string, $user_id = 0, $pathmm = 'useravatar')
    {
        $base64_string = explode(',', $base64_string); //截取data:image/png;base64, 这个逗号后的字符
        if ($base64_string) {
            $data = base64_decode($base64_string[1]);
            $path = base_path() . '/storage/app/uploads/' . $pathmm . '/' . $user_id . '/';

            if (!is_dir($path)) {
                mkdir($path, 0777, true);
            }
            //要保存的文件名 时间+扩展名
            $filename     = time() . rand(10, 99) . $user_id . '.jpg';
            //图片存放路径
            $pathback     = '/uploads/' . $pathmm . '/' . $user_id . '/';
            //返回地址
            $filenameBack = $pathback . $filename;

            $re = file_put_contents($path . $filename, $data); //写入文件并保存
            if ($re) {
                return $filenameBack;
            }
        }
    }

    /**
     * 用户头像上传
     * @param type $file
     * // 获取文件相关信息
      //        $originalName = $file->getClientOriginalName(); // 文件原名
      //        $ext          = $file->getClientOriginalExtension();     // 扩展名
      //        $realPath     = $file->getRealPath();   //临时文件的绝对路径
      //        $type         = $file->getClientMimeType();     // image/jpeg
     */
    public static function uploadOneCreate($file, $user_id = 0, $pathmm = 'useravatar')
    {
        $allowed_extensions = ["png", "jpg", "gif"];

        if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
            showMsg(1002, '上传成功', '只能上传 png | jpg | gif格式的图片');
        }
        $photoSize = $file->getClientSize() / (1024 * 1024);
        if ($photoSize > 3) {
            showMsg(1003, '图片大小不能大于3M');
        }
        //获取文件的扩展名
        $extension = $file->getClientOriginalExtension();

        //要保存的文件名 时间+扩展名
        $filename     = date('Ymd') . '0' . $user_id . '.' . $extension;
        //图片存放路径
        $path         = 'uploads/' . $pathmm . '/' . $user_id . '/';
        //返回地址
        $filenameBack = '/' . $path . $filename;

        $re = Storage::putFileAs($path, $file, $filename);
        if ($re) {
            return $filenameBack;
        }
        showMsg(1005, '上传失败', $filenameBack);
    }

    /**
     * 用户上传
     * @param type $file
     * // 获取文件相关信息
      //        $originalName = $file->getClientOriginalName(); // 文件原名
      //        $ext          = $file->getClientOriginalExtension();     // 扩展名
      //        $realPath     = $file->getRealPath();   //临时文件的绝对路径
      //        $type         = $file->getClientMimeType();     // image/jpeg
     */
    public static function uploadImg($file, $pathmm = 'images')
    {
        $allowed_extensions = ["png", "jpg", "gif"];

        if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
            showMsg(1002, '上传成功', '只能上传 png | jpg | gif格式的图片');
        }
        $photoSize = $file->getClientSize() / (1024 * 1024);
        if ($photoSize > 3) {
            showMsg(1003, '图片大小不能大于3M');
        }
        //获取文件的扩展名
        $extension = $file->getClientOriginalExtension();

        //要保存的文件名 时间+扩展名
        $filename     = date('YmdHis') . rand(10, 99) . '.' . $extension;
        //图片存放路径
        $path         = 'uploads/' . $pathmm . '/' . date('Ymd') . '/';
        //返回地址
        $filenameBack = '/' . $path . $filename;

        $re = Storage::putFileAs($path, $file, $filename);
        if ($re) {
            return $filenameBack;
        }
        showMsg(1005, '上传失败', $filenameBack);
    }

    /**
     * 用户上传多文件
     * @param type $file 上传文件
     * @param type $pathmm 上传路径
     */
    public static function uploadImgs($file, $pathmm = 'images')
    {
        // 文件类型白名单
        $allowed_extensions = ["png", "jpg", "jpeg", "gif"];
        // 声明容器
        $list               = [];

        // 遍历文件数组
        for ($i = 0; $i < count($file['name']); $i++) {
            # 文件扩展名
            $extension             = substr(strrchr($file['name'][$i], '.'), 1);
            # 文件名称(不带扩展名)
            $file_name             = basename($file['name'][$i], "." . $extension);
            $list[$i]['file_name'] = $file_name;

            # 检测文件类型
            if ($extension && !in_array($extension, $allowed_extensions)) {
                showMsg(1002, '上传失败', '只能上传 png | jpg | jpeg | gif格式的图片');
            }
            # 检测文件大小
            $photoSize = $file['size'][$i] / (1024 * 1024);
            if ($photoSize > 3) {
                showMsg(1003, '图片大小不能大于3M');
            }

            # 源文件临时位置路径
            $tmp_file_path = $file['tmp_name'][$i];
            # 要保存的文件名 时间+扩展名 
            $filename      = date('YmdHis') . rand(10, 99) . '.' . $extension;
            # 图片存放路径  
            $path          = 'uploads/' . $pathmm . '/' . date('Ymd') . '/' . $filename;
            # 返回地址
            $back_path     = '/' . $path;

            # 保存文件
            $save = move_uploaded_file($tmp_file_path, $path);
            if ($save) {
                $list[$i]['file_path'] = $back_path;
            }
        }
        return $list;
    }

    /**
     * @Author    Afree
     * @DateTime  2018-04-28
     * @copyright [上传文件]
     * @license   [license]
     * @version   [version]
     * @param     [type]      $file    [description]
     * @param     integer     $user_id [description]
     * @return    [type]               [description]
     */
    public static function uploadFile($file, $user_id = 0, $pathmm = 'usermodel')
    {
        $allowed_extensions = ["xml", "pdf", "doc", "json"];

        if ($file->getClientOriginalExtension() && !in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
            showMsg(1002, '只能上传 xml | pdf | doc格式的文件', '只能上传 xml | pdf | doc格式的文件');
        }
        $photoSize = $file->getClientSize() / (1024 * 1024);
        if ($photoSize > 3) {
            showMsg(1003, '文件大小不能大于3M');
        }
        //获取文件的扩展名
        $extension = $file->getClientOriginalExtension();

        //要保存的文件名 时间+扩展名
        $filename     = date('YmdHis') . rand(10, 99) . '.' . $extension;
        //图片存放路径
        $path         = 'uploads/' . $pathmm . '/' . $user_id . '/';
        //返回地址
        $filenameBack = '/' . $path . $filename;

        $re = Storage::putFileAs($path, $file, $filename);
        if ($re) {
            return $filenameBack;
        }
        showMsg(1005, '上传失败', $filenameBack);
    }

    /**
     * [uploadKjson description]
     * @param  [type] $kjson    [description]
     * @param  [type] $user_id  [description]
     * @param  [type] $order_sn [description]
     * @param  [type] $name     [description]
     * @return [type]           [description]
     */
    public static function uploadKjson($kjson, $user_id, $order_sn, $name)
    {
        $path = base_path() . '/storage/app/uploads/usermodels/' . $user_id . '/' . $order_sn;
        if (!is_dir($path)) {
            mkdir($path);
        }
        $filename = $path . '/' . $order_sn . $name . '.json';
        file_put_contents($filename, $content);
    }

    /**
     * 缩略图
     * @param type $imagePath
     */
    public static function PimageSLPath($imagePath, $xx = 100, $yy = 100)
    {
        //获取图片信息
        list($imgw, $imgh, $imgt, $attr) = getimagesize($imagePath);
        //计算缩小的比例,目标最长边缩至150
        $percent = $imgw > $imgh ? ($xx / $imgw) : ($yy / $imgh); //以最长边作为缩放参考
        if ($percent < 1) {
            //计算缩略图的新尺寸
            $new_width  = floor($imgw * $percent);
            $new_height = floor($imgh * $percent);
        } else {
            //如果原图尺寸小于 150x150 直接输出原图尺寸
            $new_width  = $imgw;
            $new_height = $imgh;
        }
        $thumb = imagecreatetruecolor($new_width, $new_height);

        //读取图片
        switch ($imgt) {
            //判断格式,图像类型,但缩略图输出的都是jpg..参考下文
            case 1:
                $orgimg = imagecreatefromgif($imagePath);
                break;
            case 2:
                $orgimg = imagecreatefromjpeg($imagePath);
                break;
            case 3:
                $orgimg = imagecreatefrompng($imagePath);
                break;
        }
        //imagecopyresampled(缩略图片资源, 源图片资源, dx, dy, sx,sy, 新图像宽度, 新图像高度, 源图像宽度, 源图像高度);
        imagecopyresampled($thumb, $orgimg, 0, 0, 0, 0, $new_width, $new_height, $imgw, $imgh); //缩放核心函数

        imagejpeg($thumb, $imagePath, 90); //输出图像
        //销毁资源
        imagedestroy($thumb);
        imagedestroy($orgimg);
    }

}

相关文章

网友评论

      本文标题:图片处理类(适用laravel)

      本文链接:https://www.haomeiwen.com/subject/cqriaqtx.html