zoukankan      html  css  js  c++  java
  • thinkphp3.2 上传图片兼容小程序

    第一步在配置文件中设置图片的大小和路径

    return array(
        //'配置项'=>'配置值'
        'img_save'=>[
            'size' =>[
                'app_gszc_Card'=>[
                    'compress'=>array(
                        'w'=> 720,
                        'h'=> 520
                    ),
                    'page_size'=>array(
                        'w'=> 720,
                        'h'=> 520
                    ),
                ],
    
            ],
            'save_path'=>[
                'app_gszc_Card' => array(
                    'origin'            => './Uploads/gszc_card/origin/',
                    'page_size'    => './Uploads/gszc_card/page_size/',
                )
            ]
        ]
    );

    二.上传图片类文件

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 2017-4-27 0027
     * Time: 10:49
     */
    namespace GszcEvent;
    
    use ThinkImage;
    use ThinkUpload;
    class ImgEvent
    {
    
        private $THINK_IMAGE = null;
        private $THINK_UPLOAD = null;
    
        public function __construct()
        {
            $this->THINK_IMAGE =  new Image();
            $this->THINK_UPLOAD =  new Upload();
        }
    
        /*
         * 保存base64文件
         * $img    string    base64类型的文件
         * $type   string    保存的文件类型
         *      app_user_head_img   用户头像
         *
         *
         */
        public function saveImg_base64($img = null , $type = null)
        {
            //获取保存图片配置
            $imgConfig_savePath = C("img_save.save_path");
            $imgConfig_size     = C("img_save.size");
            $saveFlag = false;
    //        dump($imgConfig_savePath[$type]);
    //        dump($imgConfig_size);
    
            if (preg_match('/^(data:s*image/(w+);base64,)/', $img, $result) && $imgConfig_savePath[$type])
            {
    
                $img_ext                = $result[2]; //图片后缀
                $img_header             = $result[1];//图片头信息
                $new_file_name          = date('Ymd').'/'.uniqid().'.'.$img_ext;
                $origin_img_path        = '';//原图的保存路径
                $origin_img_save_flag   = true;//
                foreach($imgConfig_savePath[$type] as $k => $v)
                {
    
                    if(!is_dir($v.date('Ymd')))
                    {
                        mkdir($v.date('Ymd'),0777,true);
                    }
    
                    if ($k == 'origin')
                    {
                        //先保存一份原图,然后其他尺寸的保存直接调用原图路径origin_img_path.
                        $origin_res = file_put_contents($v.$new_file_name, base64_decode(str_replace($img_header, '', $img)));
                        if (!$origin_res)
                        {
                            $origin_img_save_flag = false;
                            break;
                        }
                        else
                        {
                            $saveFlag = $new_file_name;
                            $origin_img_path = $v.$new_file_name;
                            $this->THINK_IMAGE->open($origin_img_path);
                        }
                    }
                    else
                    {
                        if ($origin_img_save_flag)
                        {
                            $width = $imgConfig_size[$type][$k]['w'];
                            $height = $imgConfig_size[$type][$k]['h'];
                            $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$new_file_name);
                        }
    
                    }
                }
    
            }
            return $saveFlag;
        }
    
    
        /*
         *  保存file类型文件
         *
         */
        public function saveImg_file($img = null , $type = null)
        {
    
            //获取保存图片配置
            $imgConfig_savePath = C("img_save.save_path");
            $imgConfig_size     = C("img_save.size");
            $saveFlag = false;
    
            if ($img && $imgConfig_savePath[$type])
            {
    
                $origin_img_save_flag   = true;
                foreach($imgConfig_savePath[$type] as $k => $v)
                {
    
                    if(!is_dir($v.date('Ymd')))
                    {
                        mkdir($v.date('Ymd'),0777,true);
                    }
    
                    if ($k == 'origin')
                    {
                        $this->THINK_UPLOAD->rootPath = $v;
                        $this->THINK_UPLOAD->subName = date('Ymd');
                        $this->THINK_UPLOAD->saveName = array('uniqid','');
                        $saveRes = $this->THINK_UPLOAD->uploadOne($img);
                        if (!$saveRes)
                        {
                            $origin_img_save_flag = false;
                        }
                        else
                        {
                            $saveFlag = true;
                            $origin_img_path = $v.$saveRes['savepath'].$saveRes['savename'];
                            $this->THINK_IMAGE->open($origin_img_path);
                            $fileName = $saveRes['savepath'].$saveRes['savename'];
                        }
                    }
                    else
                    {
                        if ($origin_img_save_flag)
                        {
                            $width = $imgConfig_size[$type][$k]['w'];
                            $height = $imgConfig_size[$type][$k]['h'];
                            $saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName);
    
                            if (!$saveFlag)
                            {
                                $saveFlag = false;
                                $origin_img_save_flag = false;
                            }
    
                        }
                    }
    
    
                }
    
                if($saveFlag)
                {
                    $saveFlag = $fileName;
                }
    
            }
            return $saveFlag;
        }
    
        /*
         *  保存file类型文件,多文件
         *
         */
        public function saveImgs_files($imgs = null , $type = null)
        {
    
            //获取保存图片配置s
            $imgConfig_savePath = C("img_save.save_path");
            $imgConfig_size     = C("img_save.size");
            $saveFlag = false;
            $imgResArr = array();//保存图片路径
            $origin_img_path = array();//原图路径
    
            if ($imgs && $imgConfig_savePath[$type])
            {
    
                $origin_img_save_flag   = true;
                foreach($imgConfig_savePath[$type] as $k => $v)
                {
    
                    if(!is_dir($v.date('Ymd')))
                    {
                        mkdir($v.date('Ymd'),0777,true);
                    }
    
                    if ($k == 'origin')
                    {
                        $this->THINK_UPLOAD->rootPath = $v;
                        $this->THINK_UPLOAD->subName = date('Ymd');
                        $this->THINK_UPLOAD->saveName = array('uniqid','');
                        $saveRes = $this->THINK_UPLOAD->upload($imgs);
    
                        if ($saveRes)
                        {
                            $saveFlag = true;
                            foreach ($saveRes as $srK => $srV)
                            {
                                $origin_img_path[] = $v.$saveRes[$srK]['savepath'].$saveRes[$srK]['savename'];
                                $fileName = $saveRes[$srK]['savepath'].$saveRes[$srK]['savename'];
                                $imgResArr[] = $fileName;
                            }
    
    
                        }
                    }
                    else
                    {
                        foreach($origin_img_path as $oipK => $oipV)
                        {
                            if ($saveFlag)
                            {
                                $width = $imgConfig_size[$type][$k]['w'];
                                $height = $imgConfig_size[$type][$k]['h'];
                                $this->THINK_IMAGE->open($oipV);
                                $saveThumb = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$imgResArr[$oipK]);
                                if (!$saveThumb)
                                {
                                    $saveFlag = false;
                                    break;
                                }
                            }
                        }
    
                    }
    
                }
    
                if ($saveFlag)
                {
                    $saveFlag = $imgResArr;
                }
            }
            return $saveFlag;
        }
    
        /*
         * 保存微信头像 - url
         *
         */
        public function save_WxImg($picUrl = '',$type = null)
        {
    
            $ch = curl_init($picUrl);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_NOBODY, 0);    //对body进行输出。
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $package = curl_exec($ch);
            $httpInfo = curl_getinfo($ch);
            curl_close($ch);
            $media = array_merge(array('mediaBody' => $package), $httpInfo);
    
            //求出文件格式
            preg_match('/w/(w+)/i', $media["content_type"], $extmatches);
            $fileExt = $extmatches[1];
    
            $saveName = md5(microtime(true)).".{$fileExt}";
    
            //获取保存图片配置
            $imgConfig_savePath = C("img_save.save_path");
            $imgConfig_size     = C("img_save.size");
            $saveFlag = false;
    
            if ($imgConfig_savePath[$type])
            {
    
                $origin_img_save_flag   = true;
                foreach($imgConfig_savePath[$type] as $k => $v)
                {
    
                    if(!is_dir($v.date('Ymd')))
                    {
                        mkdir($v.date('Ymd'),0777,true);
                    }
    
                    if ($k == 'origin')
                    {
                        file_put_contents($v.'/'.date('Ymd').'/'.$saveName,$media['mediaBody']);
    
                        $origin_img_path = $v.'/'.date('Ymd').'/'.$saveName;
                        $this->THINK_IMAGE->open($origin_img_path);
                        $fileName = date('Ymd').'/'.$saveName;
                    }
                    else
                    {
                        if ($origin_img_save_flag)
                        {
                            $width = $imgConfig_size[$type][$k]['w'];
                            $height = $imgConfig_size[$type][$k]['h'];
                            $saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName);
    
                            if (!$saveFlag)
                            {
                                $saveFlag = false;
                                $origin_img_save_flag = false;
                            }
                            else
                            {
                                $saveFlag = $fileName;
                            }
                        }
    
                    }
                }
            }
            return $saveFlag;
    
        }
    
        /*
         *  保存file类型文件
         *
         */
        public function saveImg_Wx($WxImg = array() , $type = null)
        {
    
            //获取保存图片配置
            $imgConfig_savePath = C("img_save.save_path");
            $imgConfig_size     = C("img_save.size");
            $saveFlag = false;
            $imgResArr = array();
            
            if ($WxImg && $imgConfig_savePath[$type])
            {
    
    
                foreach ($WxImg as $wiK => $wiV)
                {
    
                    $wxImg = $this->getWxImg($wiV);
    
                    $origin_img_save_flag   = true;
                    foreach($imgConfig_savePath[$type] as $k => $v)
                    {
    
                        if(!is_dir($v.date('Ymd')))
                        {
                            mkdir($v.date('Ymd'),0777,true);
                        }
    
                        if ($k == 'origin')
                        {
                            file_put_contents($v.'/'.date('Ymd').'/'.$wxImg['saveName'],$wxImg['imgMedia']['mediaBody']);
    
                            $origin_img_path = $v.'/'.date('Ymd').'/'.$wxImg['saveName'];
                            $this->THINK_IMAGE->open($origin_img_path);
                            $fileName = date('Ymd').'/'.$wxImg['saveName'];
                            $imgResArr[] = $fileName;
                        }
                        else
                        {
                            if ($origin_img_save_flag)
                            {
                                $width = $imgConfig_size[$type][$k]['w'];
                                $height = $imgConfig_size[$type][$k]['h'];
                                $saveFlag = $this->THINK_IMAGE->thumb($width, $height,3)->save($v.$fileName);
    
                                if (!$saveFlag)
                                {
                                    $saveFlag = false;
                                    $origin_img_save_flag = false;
                                }
                                else
                                {
                                    $saveFlag = $fileName;
                                }
                            }
    
                        }
                    }
                }
    
    
                if($saveFlag)
                {
                    $saveFlag = $imgResArr;
                }
    
            }
            return $saveFlag;
        }
    
    
        /*
         * 保存用户的推广图片
         */
        public function save_userShareImg($bg_img_path = '' , $head_img_path = '' , $qrCode_img_path = '' , $saveFile = '' , $userName = '' , $userDscp = '' , $font_path = '')
        {
    
            
            //设置头像图片为圆角
            $head_img_radius = $this->radius_img($head_img_path,240);
            //合并到背景图中
            $this->mergeImage($bg_img_path,$head_img_radius,$saveFile,array('left' => 200, 'top' => 55, 'width' => 480, 'height' => 480));
            //设置名称
            $this->writeText($saveFile, $saveFile, $userName,255,255,255,1010,32,$font_path, array());
            //设置二维码内容
            $this->mergeImage($saveFile,$qrCode_img_path,$saveFile,array('left' => 255, 'top' => 684, 'width' => 250, 'height' => 245));
    
            return $saveFile;
        }
    
        /*
         * 合并图片
         */
        private function mergeImage($bg_img, $main_img, $saveFile, $param)
        {
    
            extract($param);
    //        list($bgWidth, $bgHeight) = getimagesize($bg_img);
            $bgImg = $this->imagecreate($bg_img);
            if (!is_resource($main_img))
            {
                list($mainWidth, $mainHeight) = getimagesize($main_img);
                $mainImg = $this->imagecreate($main_img);
            }
            else
            {
                $mainImg = $main_img;
    
                $mainWidth = $width;
                $mainHeight = $height;
            }
            imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $mainWidth, $mainHeight);
    //        imagecopyresized($bgImg, $mainImg, $left, $top, 0, 0, $width, $height, $width,$height);
            ob_start();
            // output jpeg (or any other chosen) format & quality
            imagejpeg($bgImg, NULL, 100);
            $contents = ob_get_contents();
            ob_end_clean();
            imagedestroy($bgImg);
            imagedestroy($mainImg);
            $fh = fopen($saveFile, "w+");
            fwrite($fh, $contents);
            fclose($fh);
        }
    
        /*
         * 图片写文字
         * $bg_img 背景图片
         * $saveFile 保存图片路径
         * $text 文字
         * $fontColor 字体颜色
         * $top 图片距离顶端高度
         * $fontSize 字体大小
         * $font 字体路径
         * $param 传递的参数
         */
        private function writeText($bg_img, $saveFile, $text, $colorR,$colorG,$colorB , $top , $fontSize , $font , $param = array())
        {
            list($bgWidth, $bgHeight) = getimagesize($bg_img);
            $im = imagecreatefromjpeg($bg_img);
    
            $fontColor = imagecolorallocate($im, $colorR, $colorG, $colorB);//字的RGB颜色
            $str = mb_convert_encoding($text, "html-entities", "utf-8");;//解决乱码问题
    
            $fontBox = imagettfbbox($fontSize, 0, $font, $str);//文字水平居中实质
            $width = imagesx($im);
            imagettftext($im, $fontSize, 0, ceil(($width - $fontBox[2]) / 2), $top, $fontColor, $font, $str);
    
    
            ob_start();
            // output jpeg (or any other chosen) format & quality
            imagejpeg($im, NULL, 100);
            $contents = ob_get_contents();
            ob_end_clean();
            imagedestroy($im);
            $fh = fopen($saveFile, "w+");
            fwrite($fh, $contents);
            fclose($fh);
        }
    
        /**
         * 处理圆角图片
         * @param  string $imgPath 源图片路径
         * @param  integer $radius 圆角半径长度默认为15,处理成圆型
         * @return [type]           [description]
         */
        public function radius_img($imgPath = '', $radius = 65)
        {
            $ext = pathinfo($imgPath);
            $src_img = null;
            switch ($ext['extension']) {
                case 'jpg':
                    $src_img = imagecreatefromjpeg($imgPath);
                    break;
                case 'png':
                    $src_img = imagecreatefrompng($imgPath);
                    break;
                default:
                    $src_img = imagecreatefromjpeg($imgPath);
                    break;
            }
            $wh = getimagesize($imgPath);
            $w = $wh[0];
            $h = $wh[1];
            // $radius = $radius == 0 ? (min($w, $h) / 2) : $radius;
            $img = imagecreatetruecolor($w, $h);
            //这一句一定要有
            imagesavealpha($img, true);
            //拾取一个完全透明的颜色,最后一个参数127为全透明
            $bg = imagecolorallocatealpha($img, 255, 255, 255, 127);
            imagefill($img, 0, 0, $bg);
            $r = $radius; //圆 角半径
            for ($x = 0; $x < $w; $x++) {
                for ($y = 0; $y < $h; $y++) {
                    $rgbColor = imagecolorat($src_img, $x, $y);
                    if (($x >= $radius && $x <= ($w - $radius)) || ($y >= $radius && $y <= ($h - $radius))) {
                        //不在四角的范围内,直接画
                        imagesetpixel($img, $x, $y, $rgbColor);
                    } else {
                        //在四角的范围内选择画
                        //上左
                        $y_x = $r; //圆心X坐标
                        $y_y = $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                        //上右
                        $y_x = $w - $r; //圆心X坐标
                        $y_y = $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                        //下左
                        $y_x = $r; //圆心X坐标
                        $y_y = $h - $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                        //下右
                        $y_x = $w - $r; //圆心X坐标
                        $y_y = $h - $r; //圆心Y坐标
                        if (((($x - $y_x) * ($x - $y_x) + ($y - $y_y) * ($y - $y_y)) <= ($r * $r))) {
                            imagesetpixel($img, $x, $y, $rgbColor);
                        }
                    }
                }
            }
            return $img;
        }
    
        private function imagecreate($bg)
        {
            $bgImg = @imagecreatefromjpeg($bg);
            if (FALSE == $bgImg) {
                $bgImg = @imagecreatefrompng($bg);
            }
            if (FALSE == $bgImg) {
                $bgImg = @imagecreatefromgif($bg);
            }
            return $bgImg;
        }
    
    
        /*
         * 下载微信服务器的图片
         * media_id    微信的媒体id
         * type        保存图片类型
         * */
        public function getWxImg($mediaId)
        {
            if(!class_exists('JSSDK') && !class_exists('WxPayConfig'))
            {
                vendor('wxsdkapi.jssdk');
                vendor('wxpayapi.lib.WxPay#Config');
            }
            $res = new JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET'));
            $accessToken = $res->getAccessToken();
        
    //    $mediaId = 'cVqPIhDPPThUtayzS27GK6RN4-dseA6AZnTJxcg7_VaeuAaKcL53X32hmKxhgiSD';
    //    $accessToken = 'KHaopJY444kJ06LcH9ESj-73pkEfFTgIr3L45RURuUxv1KTjgXyFepJ-cTIF_oUyAKyYb5dK2r9L_wC-WDw2USqGQBMobC6DzPImuhPqxB8jxZ41CuLDtJiaEZk8Vf5kWSSjAAAAWW';
            $picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId";
    
            $ch = curl_init($picUrl);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_NOBODY, 0);    //对body进行输出。
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $package = curl_exec($ch);
            $httpInfo = curl_getinfo($ch);
            curl_close($ch);
            $media = array_merge(array('mediaBody' => $package), $httpInfo);
    
            //求出文件格式
            preg_match('/w/(w+)/i', $media["content_type"], $extmatches);
            $fileExt = $extmatches[1];
    
            $saveName = md5(microtime(true)).".{$fileExt}";
    
            $img = array('imgMedia'=>$media,'saveName'=>$saveName);
    
            return $img;
        }
            /*
         * 下载微信服务器的图片
         * media_id    微信的媒体id
         * type        保存图片类型
         * */
        public function getWxImg2($mediaId,$file)
        {
            if(!class_exists('JSSDK') && !class_exists('WxPayConfig'))
            {
                vendor('wxsdkapi.jssdk');
                vendor('wxpayapi.lib.WxPay#Config');
            }
            $res = new JSSDK(C('WEIXINPAY_CONFIG.APPID'),C('WEIXINPAY_CONFIG.APPSECRET'));
            $accessToken = $res->getAccessToken();
            $picUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$accessToken&media_id=$mediaId";
        
            
           
    
            return httpcopy($picUrl,$file);
        }
    
    }

    三.调用方法 上传图片

        /**
         * 上传图片
         * @param varchar  file 图片文件
         * @httpmethod POST
         * @response 响应数据
         * {
         *   "ResultType": "1000",
         *   "Message": "上传成功",
         *   "AppendData": "图片路径",
         * }
         */
        public function UploadNavImg()
        {
            $imgEven = A('Gszc/Img','Event');
            if(!empty($_FILES['file']['name'])){
                $img=$imgEven->saveImg_file($_FILES['file'],'app_gszc_Card');
    
                $this->array_return['errno']=self::__OK__;
                $this->array_return['errmsg']='上传成功!';
                $this->array_return['data']=$img;
                $this->ajaxReturn($this->array_return);
            }
            $this->array_return['errno']=self::__ERROR__;
            $this->array_return['errmsg']='没有上传文件!';
            $this->array_return['data']=[];
            $this->ajaxReturn($this->array_return);
    
        }
  • 相关阅读:
    A+B Problem
    迭代平方根
    猴子报数
    分数求和
    猴子吃桃
    钻石
    杨辉三角形
    MYSQL 5.7 修改密码、登录问题
    SQL 语句 explain 分析
    重构CMDB,避免运维之耻
  • 原文地址:https://www.cnblogs.com/wangziyue/p/9039302.html
Copyright © 2011-2022 走看看