<?php


namespace app\lib\utils;

\think\__require_file(APP_PATH . 'common/library/aliyuncs/oss-sdk-php/autoload.php');
use OSS\Core\OssException;
use OSS\OssClient;
use think\Config;
use think\Log;

class FileUpload
{


    //新水印
//    $ori_img//原图
//    $water_img//水印
//    $new_img //生成水印后的图片
    public static function waterImage($ori_img = null,$water_img = null,$new_img = null){
        if(empty($new_img)){
            $name = date('Y/m/d', time());
            $new_img=ROOT_PATH . '/public/uploads/'.$name .'/'.time().".jpg";
        };
        if (!@fopen( $ori_img, 'r' )|| !@fopen($water_img, 'r' )){//是否存在文件
            return "图片不存在!";
        }
        $original = getimagesize($ori_img); //得到图片的信息，可以print_r($original)发现它就是一个数组
        $watermark = getimagesize($water_img);
        $s_original = FileUpload::imgCreateFrom($ori_img, $original[2]); //$original[2]是图片类型，其中1表示gif、2表示jpg、3表示png
        $s_watermark = FileUpload::imgCreateFrom($water_img, $watermark[2]);

        $posX = $original[0] - $watermark[0]-6; //X坐标（右下角）
        $poxY = $original[1] - $watermark[1]-3; //Y坐标（右下角）
        list($dst_w,$dst_h,$dst_type) = getimagesize($water_img);
        //打水印
        imagecopy($s_original, $s_watermark, $posX, $poxY, 0, 0, $dst_w, $dst_h);
        /*imagecopy($dst_im,$src_im,$dst_x,$dst_y,$src_x,$src_y,$src_w,$src_h)
       $dst_im是背景图像，就是需要添加水印的图片
       $src_im是水印图片；$dst_x,#dst_y需要把水印放到背景图片的(x,y)坐标;
       $src_x,$src_y是截取水印的图片的开始坐标
       $width，$height是截取的图片的就是水印的长度和宽度*/
        //header("Content-type:image/jpeg");
        //imagejpeg($s_original); //向浏览器输出图片

        $loop = imagejpeg($s_original, $new_img); //生成新的图片(jpg格式)，如果用imagepng可以生成png格式
        if($loop){
            return true;
        }
        return false;
    }

    //根据文件类型 创建一个新图象
    public static function imgCreateFrom($img_src, $val){
        switch($val){
            case 1 : $img = imagecreatefromgif($img_src);
                break;
            case 2 : $img = imagecreatefromjpeg($img_src);
                break;
            case 3 : $img = imagecreatefrompng($img_src);
                break;
        }
        return $img;
    }



    /**
     * 上传图片到OSS
     * @param $filename
     */
    public static function image($fileName,$uploadDir)
    {
        $config = Config::get('OSS'); //获取Oss的配置
       // Log::record("阿里云oss配置".json_encode($config), 'debug');//记录错误
        //实例化对象 将配置传入
        $ossClient= new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint']);
        try {
            $objectName=$fileName;
            //$objectThumbName=substr($file['savepath'],strlen(getcwd())+1)."thumb_".$file['savename'];
          //  Log::record("上传图片路径".$objectName, 'debug');//记录错误
            //执行阿里云上传
            $result = $ossClient->uploadFile($config['Bucket'],$objectName, $uploadDir);//图片地址:$result['info']['url']
            Log::record("阿里云图片路径".json_encode($result), 'debug');//记录错误
            //这里是有sha1加密 生成文件名 之后连接上后缀
            /*$options = array(OssClient::OSS_FILE_UPLOAD => "thumb_".$file['savename'],OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100");
            $res = $ossClient->uploadFile($config['Bucket'],$objectThumbName, $file['tmp_name'],$options);
            Log::record("阿里云缩略图片路径".json_encode($res), 'debug');//记录错误*/
            //$arr = ['code' => 200, 'msg' => '上传成功', 'data' => $result['info']['url']];
            return true;
        } catch (OssException $e) {
            return false;
            // $arr = ['code' => 0, 'msg' => $e->getMessage(), 'data' => ''];
        }
    }
}