From d31e928394ad711a86a3d93caa6470b1abb96a39 Mon Sep 17 00:00:00 2001
From: ke <893754509@qq.com>
Date: Mon, 13 May 2024 18:47:46 +0800
Subject: [PATCH] 全景图更新切图功能kl 5-13
---
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/endpoint/OssEndpoint.java | 126 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 126 insertions(+), 0 deletions(-)
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/endpoint/OssEndpoint.java b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/endpoint/OssEndpoint.java
index c83c2a4..12bcb5e 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/endpoint/OssEndpoint.java
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/endpoint/OssEndpoint.java
@@ -18,11 +18,14 @@
import cn.gistack.resource.builder.oss.OssBuilder;
import cn.gistack.resource.entity.TextualResearchAttach;
+import cn.gistack.resource.panoramaUtils.Img4JavaUtil;
+import cn.gistack.resource.panoramaUtils.QietuResult;
import cn.gistack.resource.service.IAttachService;
import cn.gistack.resource.service.TextualResearchAttachService;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
+import org.apache.commons.io.FileUtils;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.oss.model.OssFile;
import org.springblade.core.secure.annotation.PreAuth;
@@ -35,6 +38,10 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.*;
/**
@@ -204,6 +211,123 @@
}
/**
+ * 全景图片上传,并切图
+ * @param multipartFile 文件
+ * @param resGuid 水库编号
+ * @return
+ */
+ @SneakyThrows
+ @PostMapping("/put-file-by-panorama")
+ public R putFileByPanorama(@RequestParam MultipartFile multipartFile, String resGuid) {
+
+ // 临时文件路径
+ String linShiBaseUrl = "/data/panorama/qietu/";
+// String fileName = multipartFile.getOriginalFilename();
+ // 获取文件名
+ String picName = multipartFile.getOriginalFilename();// 原始全景图名称
+ String dirPath = linShiBaseUrl + resGuid + "/"; //临时文件夹路径
+
+ File dir = new File(dirPath);
+ if (dir.isDirectory()) {
+ // 清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错
+ FileUtils.cleanDirectory(dir);
+ } else {
+ dir.mkdirs();
+ }
+ String picUrl = dirPath + picName; // 原始全景图文件路径
+ File file = new File(picUrl); // 文件上传的原始全景图,存入临时路径
+ multipartFile.transferTo(file);
+ FileInputStream ysfileInputStream = new FileInputStream(file);
+ BladeFile qjbladeFile = ossBuilder.templateByPrefixPathPanorama("panorama", resGuid).putFile(picName, ysfileInputStream);
+ String yuanshiQJurl = qjbladeFile.getLink();
+ ysfileInputStream.close();
+
+ /**
+ * 这里开始切图
+ */
+ HashMap<String,String> qietuHashMap = new HashMap<String,String>();
+ int col = 8;
+ int row = 4;
+ String[] split = picName.split("\\.");
+ String picHeadName = split[0];
+ String picLastName = split[1];
+
+ // 获取原始全景图图片信息
+ HashMap<String, Integer> imgInfoRT = Img4JavaUtil.getImgInfoRT(file);
+ Integer width = imgInfoRT.get("width");
+ Integer height = imgInfoRT.get("height");
+ // 计算切成小图的长和宽
+ Integer biliWidth = width/col;
+ Integer biliHeight = height/row;
+
+ for (int i=0 ; i < col ; i++) {
+ // 计算图片的横坐标(长边)
+ int x = i * biliWidth;
+ for (int j=0 ; j<row ; j++){
+ // 计算图片的纵坐标(宽边)
+ int y = j * biliHeight;
+ // 切图名称
+ String outpicName = picHeadName + "_" + i + "_" +j + "." + picLastName;
+ // 切图后临时图片的的路径
+ String lastiUrl = dirPath + outpicName;
+ Img4JavaUtil.cropImg(picUrl ,lastiUrl ,biliWidth,biliHeight,x,y);// 切图存放进临时图片中
+ qietuHashMap.put(outpicName,lastiUrl);
+ }
+ }
+
+ // 切图完成后删除原始全景图
+ if (file.exists()) {
+ // 删除指定文件,不存在报异常
+ FileUtils.forceDelete(file);
+ }
+ /************************************切图结束********************************************/
+
+
+ List<String> qieTuUrlList = new ArrayList<String>();
+ String urlHead = null;
+ Set<String> mapKey = qietuHashMap.keySet();
+ if(qietuHashMap != null && qietuHashMap.size()>0) {
+ for (String picQName : mapKey) {
+ String url = qietuHashMap.get(picQName);
+ Path qietuPath = Paths.get(url);
+ File qietufile = qietuPath.toFile();
+ FileInputStream fileInputStream = new FileInputStream(qietufile);
+ BladeFile bladeFile = ossBuilder.templateByPrefixPathPanorama("panorama", resGuid).putFile(picQName, fileInputStream);
+ fileInputStream.close(); // 关闭文件流
+
+ // 切图上传完成后删除
+ if (qietufile.exists()) {
+ // 删除指定文件,不存在报异常
+ FileUtils.forceDelete(qietufile);
+ }
+ String link = bladeFile.getLink();
+ qieTuUrlList.add(link);// 上传后的图片路径
+ urlHead = link.replace(picQName,"");
+ }
+ }
+ QietuResult qietuResult = new QietuResult();
+ qietuResult.setQieTuUrlList(qieTuUrlList);
+ qietuResult.setUrlHead(urlHead);
+ qietuResult.setRow(row);
+ qietuResult.setCol(col);
+ qietuResult.setQuanJingWidth(width);
+ qietuResult.setQuanJingHeight(height);
+ qietuResult.setQjName(picName);
+ qietuResult.setQjUrl(yuanshiQJurl);
+
+
+ return R.data(qietuResult) ;
+ }
+
+ @SneakyThrows
+ @PostMapping("/put-file-by-panorama2")
+ public R putFileByPanorama2(@RequestParam MultipartFile multipartFile, String resGuid){
+
+ return null;
+ }
+
+
+ /**
* 保存考证附件上传数据
* @param bladeFile
*/
@@ -248,6 +372,8 @@
return R.data(bladeFile);
}
+
+
/**
* 上传文件并保存至附件表
*
--
Gitblit v1.9.3