attempts() > 2) { //通过这个方法可以检查这个任务已经重试了几次了 $job->delete(); }else{ $res = $this->jobDone($queuedata); if($res){ $job->delete(); }else{ VrView::where('id',$queuedata['view_id'])->update(['cut_img_status'=>3,'cut_img_ing'=>0]); } } } catch (OssException $e) { //报错直接结束 VrView::where('id',$queuedata['view_id'])->update(['cut_img_status'=>3,'cut_img_ing'=>0]); $job->delete(); } } public function failed($queuedata) { // ...任务达到最大重试次数后,失败了 } //切图 private function jobDone($data){ // Log::close(); // //场景信息 $info = VrView::where('id',$data['view_id'])->field('id,vr_path,structure,vr_group_id')->findOrEmpty(); // //切图中或切图完成直接结束 if ($info->isEmpty() || in_array($info->cut_img_status,[4])) return true; // //切图开始时间 $info->cut_img_time = time(); $info->save(); // //原图 $ali_oss_bindurl = config('app.vr_ali_oss_bindurl'); $url = 'https://' . $ali_oss_bindurl . '/'; $path = $info->structure.$info->vr_path.'.jpg'; $info->pic_path = $url.$path; //垃圾数据 if(strpos($info->pic_path,'.jpg')===false) return false; //oss文件是否存在 if(!$this->ossCheck($path)) return false; // //下载原图 $inputfile = 'public/upload/wzh/'.$info->vr_path.'.jpg';// 原图保存地址 // // $measurement = '?x-oss-process=image/resize,w_100';//下载图片尺寸 $measurement = ''; $this->dlfile($info->pic_path.$measurement,$inputfile); //下载原图失败 if(!file_exists($inputfile)) return false; //开始切图 $outputfilepath = 'public/upload/wzh/'.$info->vr_path.'/';//切图保存地址 $krpano = new Krpano(); $i = false; try { // 生成六面体的6张图 $krpano->spheretocubeCube($inputfile, $outputfilepath); // 生成封面图 $krpano->makepreview($inputfile, $outputfilepath); // 生成竖版预览图 $krpano->spheretocubeVcube($inputfile, $outputfilepath); } catch (Exception $e) { trace($e->getMessage(), 'error'); $i = true; } @unlink($inputfile);//删除本地原图 $arr = ['image_b','image_d','image_f','image_l','image_r','image_u','preview','thumb']; //切图失败,可能只切成一张图 if ($i) { foreach ($arr as $v1) { $img = $outputfilepath.$v1.'.jpg';//切图保存地址 if(file_exists($img)) @unlink($img);////删除已经生成的切图 } @rmdir('public/upload/wzh/'.$info->vr_path);//删除空文件夹 return false; } //切图成功 上传oss $size = 0;//切图大小 foreach ($arr as $v2) { //切图保存地址 $img = $outputfilepath.$v2.'.jpg'; $file = $info->structure.$v2.'.jpg'; $res = $this->ossUpload($file,$img); if ($res) $size += filesize($img); @unlink($img);//删除本地文件 } @rmdir('public/upload/wzh/'.$info->vr_path);//删除空文件夹 $info->cut_img_status = 4; $info->cut_img_size = $size; $info->save(); VrGroup::where('id',$info->vr_group_id)->inc('size',$size)->update(); dataStatistics($info->root_id,'use_count',$size,'inc');//manage应用首页统计数据 return true; } //下载图片 private function dlfile($file_url, $save_to) { $in= fopen($file_url, "rb"); $out= fopen($save_to, "wb"); while ($chunk = fread($in,8192)) { fwrite($out, $chunk, 8192); } fclose($in); fclose($out); } /* * oss文件上传 */ private function ossUpload($path, $file) { $accessKeyId = config('app.vr_ali_oss_access_key_id'); $accessKeySecret = config('app.vr_ali_oss_access_key_secret'); $endpoint = config('app.vr_ali_oss_end_point'); $bucket = config('app.vr_ali_oss_bucket'); $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); try { $oss->uploadFile($bucket, $path, $file); } catch (OssException $e) { return false; } return true; } /* * oss检测文件 */ private function ossCheck($file) { // $file = 'vr/2023/03/18/9F8E30932ECE44EB9C7FBC87A44FBD3D/9F8E30932ECE44EB9C7FBC87A44FBD3D.jpg'; $accessKeyId = config('app.vr_ali_oss_access_key_id'); $accessKeySecret = config('app.vr_ali_oss_access_key_secret'); $endpoint = config('app.vr_ali_oss_end_point'); $bucket = config('app.vr_ali_oss_bucket'); $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); try { $exist = $oss->doesObjectExist($bucket, $file); return $exist; } catch (OssException $e) { return false; } } private function compress_image($source_url, $destination_url, $max_size) { //压缩后的宽高 $arr = ['image_b'=>1000,'image_d'=>900,'image_f'=>900,'image_l'=>900,'image_r'=>900,'image_u'=>900,'preview'=>2500]; if(!isset($arr[$max_size])) return false; $max_size = $arr[$max_size]; $info = getimagesize($source_url); $width = $info[0]; $height = $info[1]; $mime = $info['mime']; // 创建图像 $image = imagecreatefromjpeg($source_url); // 缩放图像 $scale = min($max_size / $width, $max_size / $height); if ($scale < 1) { $new_width = (int)floor($scale * $width); $new_height = (int)floor($scale * $height); $new_image = imagescale($image, $new_width, $new_height); imagedestroy($image); $image = $new_image; } // 保存图像 imagejpeg($image, $destination_url, 90); } }