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