TP6压缩文件

发布时间 2023-11-07 16:16:42作者: 现世中的素人

 

    /**
     * @return \think\response\Json
     */
    public function upload()
    {
        // 获取上传的文件
        $file = Request::file('link');

        $savePath = $this->imagIckCompress($file);
        var_dump($savePath);
        var_dump($savePath);

        //        return success(Status::SUCCESS, '操作成功', [
        //            "link" => 'https://xest-aaning.com/storage/' . $repfile
        //        ]);
    }

    private function imagIckCompress($file)
    {
        if ($file) {
            # 上传文件
            $fileName = $file->getOriginalName();

            $type = strstr($fileName, '.');

            // 将原始文件名的后缀名修改为 .png
            $newName = uniqid('front_', true) . $type;

            // 保存上传文件到 public 目录的 uploads 文件夹中,文件名为 $newName
            $savePath     = 'storage/topic';
            $saveFullPath = $savePath . DIRECTORY_SEPARATOR . $newName;

            // 移动文件到指定目录
            $file->move(public_path($savePath), $newName);

            $uniqueName  = uniqid('new_front_', true) . $type;
            $target_file = app()->getRootPath() . "public/storage/topic/" . $uniqueName;


            $image = new Imagick($saveFullPath);

            //            // 设置压缩质量(0-100,数值越小压缩比越高)
            //            $image->setImageCompressionQuality(90);
            //
            //
            //            // 压缩图片
            //            $image->writeImage($target_file);
            //
            //            // 释放资源
            //            $image->destroy();


            // 获取原始图片的文件大小
            $originalFileSize = $image->getImageLength();

            // 设置目标文件大小(1MB)
            $targetFileSize = 1024 * 1024;

            // 初始压缩质量为90
            $compressionQuality = 90;

            // 逐渐降低压缩质量,直到文件大小小于目标大小
            while ($originalFileSize > $targetFileSize && $compressionQuality > 40) {
                // 设置压缩质量
                $image->setImageCompressionQuality($compressionQuality);

                // 保存缩小尺寸后的图片
                $image->writeImage($target_file);

                // 获取保存后的图片文件大小
                //            $compressedFileSize = filesize($target_file);

                // 压缩质量降低10,再次循环
                $compressionQuality -= 10;
            }
            return $target_file;
        } else {
            return false;
        }
    }