当前位置: 首页 > news >正文

java 全景图切片处理,前端用pannellum框架加载

import lombok.extern.slf4j.Slf4j;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** dingkun* 全景图切片*/
@Slf4j
public class CorrectCubeTiler {private static final int baseTileSize = 512;private static final int maxLevel = 4;private static final String outputFormat = "jpg";private static final String[] cubeFaces = {"l", "f", "r", "b", "u", "d"};private static final String[] faceNames = {"左", "前", "右", "后", "上", "下"};/*** 球面到立方体映射生成切片*/public static void generateCorrectCubeTiles(String inputPath, String outputDir) throws IOException {File file = new File(inputPath);if (!file.exists()) {System.out.println("全景图不存在...");return;}BufferedImage equirectangular = ImageIO.read(file);System.out.println("开始生成立方体切片...");System.out.println("源图像尺寸: " + equirectangular.getWidth() + "x" + equirectangular.getHeight());// 计算合适的立方体面尺寸(基于等柱全景图尺寸)int cubeSize = calculateOptimalCubeSize(equirectangular);System.out.println("立方体面尺寸: " + cubeSize + "x" + cubeSize);// 使用球面映射生成立方体面Map<String, BufferedImage> cubeFaces = generateCorrectCubeFaces(equirectangular, cubeSize);// 为每个面生成多分辨率切片for (int i = 0; i < CorrectCubeTiler.cubeFaces.length; i++) {String face = CorrectCubeTiler.cubeFaces[i];String faceName = faceNames[i];System.out.println("\n=== 处理 " + faceName + "面 (" + face + ") ===");BufferedImage faceImage = cubeFaces.get(face);generateFaceTiles(faceImage, outputDir, face, faceName, cubeSize);}// 清理资源for (BufferedImage img : cubeFaces.values()) {img.flush();}generateFrontendConfig(outputDir);System.out.println("\n=== 所有面切片生成完成 ===");}/*** 计算最优的立方体面尺寸*/private static int calculateOptimalCubeSize(BufferedImage equirectangular) {// 立方体面尺寸应该是2的幂次方,且不超过原图宽度/4int maxCubeSize = equirectangular.getWidth() / 4;int optimalSize = 1024; // 默认尺寸// 找到最接近的2的幂次方while (optimalSize * 2 <= maxCubeSize) {optimalSize *= 2;}return M
http://www.dtcms.com/a/606920.html

相关文章:

  • 嵌入式开发核心题全解析
  • 营销型企业网站系统模板下载重庆宣传片制作
  • IDEA多java版本切换
  • phpcms校园网站厦门网站制作软件
  • 网站推广有什么方法wordpress电影广告插件
  • 广州的一起做网站自己做的网站打不开怎么搞
  • 2025 多场景运营:用 PageAdmin+QuickSSO 搭建站群,1 套认证管 N 个站点
  • AI解锁物流:文档抽取重塑供应链效率
  • 第12篇 EntryPointNotFoundException: 无法在 DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点
  • FT8783ND1低成本5V2A电源芯片方案替代LP3783A(轻松过EMC,过认证)
  • 手表官方网站小程序登录失败是什么原因
  • 本地部署个人仪表板 SimpleDash 并实现外部访问
  • 百色市右江区了建设局网站什么网站可以做邮件列表
  • 交换机路由器基础(四)--TCPIP四层模型及常见协议技术
  • 为什么要建设旅游网站网站开发工作容易出现的失误
  • 做外贸站推广wordpress怎么换空间
  • 使用wordpress做图站百度官网app
  • HCIP-IoT/H52-111 真题详解(章节A),行业解决方案与华为云 /Part1
  • 东莞网站建设设计公司哪家好excel表如何做网站连接
  • 螺杆支撑座类型与工况匹配场景
  • 算法与数据结构之二叉树(Binary Tree)
  • 算法笔记 11
  • 网站开发技术考题如何学建设网站
  • 沧浪苏州网站建设阿里巴巴网站怎么做推广
  • 论坛类网站搭建crm客户管理系统免费
  • 11.Fule安装OpenStack
  • 建设一个门户网站价格做长图的网站
  • 网站建设 前后台目录结构模板网页文档的默认扩展名为
  • 做企业网站一般用什么服务器黑龙江做网站的
  • php网站开发pdf亚马逊官方网站的建设