Yii2.0 后台多图上传,并且压缩图片大小!!!

// 视图层
 'options' => [
       'class' => 'form-horizontal',
       'enctype' => 'multipart/form-data',
              ]
<?= $form->field($model, 'new_images[]')->fileInput(['multiple' => true]) ?>

 // model 层
 public function beforeSave($insert)
    {
        if (empty($_FILES[array_keys(Yii::$app->request->bodyParams)[0]]['name']['new_images'][0])) {
            $this->addError("new_images", "图片必须传递");return false;
        }

        $contents = explode('<br>',$this->new_contents);
        $options =  UploadedFile::getInstances($this, 'new_images');
        $data = $this->uploadFiles($options);
        print_r($data);
   }

    /**
     * 多文件上传
     * @param $options
     * @return array
     */
    public function uploadFiles($options) {

        $data = array();
        if (empty($options)) {
            return $data;
        }

        foreach ($options as $k => $img) {
            $file = Yii::getAlias('@frontend/web/uploads/').date('Y/m/d/');

            if (!file_exists($file)) {
                mkdir($file,0777,true);
            }

            $fullName = $file . uniqid() . '.' . $img->getExtension();
            $img->saveAs($fullName);    //上传,并保存结果
            $data[$k] = str_replace(Yii::getAlias('@frontend/web/'), '', $fullName);
        }

        return $data;
    }

// 这个方法位置是yii 自带的方法。地址 如下图!
    public function saveAs($file, $deleteTempFile = true)
    {

        if ($this->error == UPLOAD_ERR_OK) {
            if ($deleteTempFile) {
//                var_dump($this->tempName);exit;
                return $this->image_png_size_add($this->tempName, $file);
//                return move_uploaded_file($this->tempName, $file);
            } elseif (is_uploaded_file($this->tempName)) {
                return copy($this->tempName, $file);
            }
        }
        return false;
    }


    function image_png_size_add($imgsrc,$imgdst){

        list($width,$height,$type)=getimagesize($imgsrc);

        $new_width = $width*0.9;

        $new_height =$height*0.9;

        $flag=false;

        switch($type){

            case 1:

                $giftype=check_gifcartoon($imgsrc);


                if($giftype){

//                    header('Content-Type:image/gif');

                    $image_wp=imagecreatetruecolor($new_width, $new_height);

                    $image = imagecreatefromgif($imgsrc);

                    imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

                    imagejpeg($image_wp, $imgdst,75);

                    imagedestroy($image_wp);

                    $flag=true;
                }

                break;

            case 2:

//                header('Content-Type:image/jpeg');

                $image_wp=imagecreatetruecolor($new_width, $new_height);

                $image = @imagecreatefromjpeg($imgsrc);

                imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

                imagejpeg($image_wp, $imgdst,75);

                imagedestroy($image_wp);

                $flag=true;

                break;

            case 3:

//                header('Content-Type:image/png');

                $image_wp=imagecreatetruecolor($new_width, $new_height);

                $image = imagecreatefrompng($imgsrc);

                imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

                imagejpeg($image_wp, $imgdst,75);

                imagedestroy($image_wp);

                $flag=true;

                break;

        }
        return $flag;

    }

根目录下的:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值