大批量影像瓦片优化

news2024/9/22 19:28:07

背景

在很多场景中,需要用的影像瓦片,常规的思路是将tif进行切图,做成分层的瓦片:
在这里插入图片描述
但是,如果层级太高,产生的文件将十分庞大,据测试,某地级市18层级切片,内存占用高达200多G,在部署和传输的过程中,都很不利。
在这里插入图片描述

通用处理

因此,采取的思路是如何能够压缩每一张图层,在尽可能保留原有分辨率和色彩的同时,减少影像图片内存的大小。
最初采用开源压缩工具:pngquant
windows下有GUI版本,但是GUI版本只能针对单文件,我们需要运行它的核心文件:pngquanti.exe。
其单文件处理命令为:pngquant --quality=65-80 input.png
但是很明显,这种方式并不适用,因为影像瓦片涉及每一个层级文件夹,层级文件夹里还有索引文件夹,因此,需要一个命令来遍历文件夹,找到其中的影像文件,压缩后并替换:

for /r "C:\path\to\your\3dtiles" %i in (*.png) do "C:\path\to\pngquant.exe" --ext .png --force --quality=65-80 "%i"

将文件夹和处理程序的地址替换即可。

改进处理

上述方法似乎已经解决了之前的问题,但是如果数据量太大,依然面临着一个不能忽视的问题,那就是处理时间太长,那能否调用多线程来实现多步压缩处理呢?事实是可行的,为了能够实现多线程,且用户自定义线程数,可以通过python构建一个简单的GUI程序,加上一个进度条,查看文件处理进展。
界面设计如下:

def __init__(self, master):
        self.master = master
        master.title("PNG优化工具 (多线程版)")

        self.pngquant_path = tk.StringVar()
        self.folder_path = tk.StringVar()
        self.num_threads = tk.IntVar(value=4)  # 默认线程数

        tk.Label(master, text="PNGQuant路径:").grid(row=0, column=0, sticky="e")
        tk.Entry(master, textvariable=self.pngquant_path, width=50).grid(row=0, column=1)
        tk.Button(master, text="浏览", command=self.browse_pngquant).grid(row=0, column=2)

        tk.Label(master, text="文件夹路径:").grid(row=1, column=0, sticky="e")
        tk.Entry(master, textvariable=self.folder_path, width=50).grid(row=1, column=1)
        tk.Button(master, text="浏览", command=self.browse_folder).grid(row=1, column=2)

        tk.Label(master, text="线程数:").grid(row=2, column=0, sticky="e")
        tk.Entry(master, textvariable=self.num_threads, width=5).grid(row=2, column=1, sticky="w")

        self.start_button = tk.Button(master, text="开始处理", command=self.start_processing)
        self.start_button.grid(row=3, column=1)

        self.progress = ttk.Progressbar(master, length=300, mode='determinate')
        self.progress.grid(row=4, column=0, columnspan=3, pady=10)

        self.log = tk.Text(master, height=10, width=60)
        self.log.grid(row=5, column=0, columnspan=3)

        self.file_queue = queue.Queue()
        self.total_files = 0
        self.processed_files = 0

程序运行效果:
在这里插入图片描述

压缩效率对比

17层级文件夹:

  • 原始大小:22GB
  • 现在大小:5.57GB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows】bat批处理获取文件路径,并写入注册表

echo off setlocal:: 获取当前绝对路径 for %%I in ("%~dp0") do set "CURRENT_DIR%%~fI":: 拼接文件名 set "FILE_NAMEtest.exe" set "FULL_PATH%CURRENT_DIR%%FILE_NAME%"::创建注册表项并写入数据 ::/v 具体的注册表项值的查…

图片拼图怎么操作?教你5个快速拼图的方法

我的元气假期已经到尾声了,在此期间的照片也积累了很多,要怎么把它们全部分享出来呢? 当然,最直接的方式就是把它们做成一张张精美的图片拼图啦!这样不仅能节省空间,还能让朋友们一眼就看到你的精彩假期生…

一篇文章带你入门Golang

Go语言的特点和优势 1.简单易学 Go语言语法简单,包含了类似C语言的语法。如果读者已经掌握了两到三门编程语言,那么学习Go语言只需要几天的熟悉过程。即使一名刚入门的开发者,花几个星期也能写出来性能较高的程序。 2&#xff…

GlobalUsing、JSON Schema、NuGet使用方法

一、速通一图流 二、GlobalUsing 使用 1. 关于 GlobalUsing 在 .NET 6/C# 10 之后,微软引入了 GlobalUsings 机制。这个机制允许你在项目根目录下创建一个 GlobalUsings.cs 文件,并在其中定义全局的 using 指令。这样一来,项目中的其他 .cs…

公网、内网ip地址专用SSL证书

现在给网站安装SSL证书来实现网站的HTTPS安全访问已经成了大多数人的共识,但是有一些特殊情况:比如对于个别的应用IP地址不需要绑定域名,只是单纯用IP来访问网站,这种情况下,可以实现HTTPS访问吗? 先说答案…

通风天窗设计使用说明

通风天窗设计使用说明旨在为用户提供一套全面、详细的安装、使用、维护及安全指南,适用于各类工业厂房、仓库、体育馆等大型公共建筑顶部的自然通风系统。通风天窗通过有效利用风压和热压效应,促进室内空气流通降低室内温度,改善工作环境&…

【Python基础】基础语法

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、Python 基础语法2.1 编码格式2.2 标识符2.3 保留字2.4 注释2.5 行与缩进2.6 多行语句2.7 同一行显…

USB5834数据采集卡30路模拟量采集卡DAQ卡——阿尔泰科技

概述: 产品应用: AD模拟量输入功能: DI数字量输入功能: DO数字量输出功能: CNT定时/计数器功能: 其它指标: 板卡图片及尺寸:

等保需要的设备部署vs网络安全域划分原则

等保需要的安全设备和部署 技术要点–等保2级 技术要点–等保3级 安全产品/服务全景图 选型产品说明 安全区域边界配置 资产探测及漏洞检测配置 网络安全域划分原则 网络安全域 定义 网络安全域是一种网络划分方式,将具有相同安全需求、访问控制、相同信任级别、…

uva227 (我tm破防了!!!)

本人写了小十天就干这个(我太菜了那个紫皮书出这么恶心的题本身代码逻辑并不难,我也写出来了但是就算有问题我ccccccccccccccc) 首先说一下我不讲这个,因为我本身vs没有运行出来正确结果,在第二个输入中我输入的这个多…

极狐GitLab 如何管理 Kubernetes 集群?

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

高效实用!mp4转mkv,视频格式转换技巧分享

mp4和mkv是两种常见的视频格式,它们之间有着明显的区别。简单来说,mp4是一种较为通用的视频格式,支持在多种设备和播放器上播放,文件大小适中,但可能不支持一些高级功能。而mkv则是一种更为灵活的格式,能够…

深度学习-批量与动量【Datawhale X 李宏毅苹果书 AI夏令营】

实际工程中使用批量和动量可以对抗鞍点或局部最小值。 批量: 在计算梯度的时候不会用所有数据计算损失。类比我们考试复习时,一个单元一个单元的知识点输入,所有单元都输入就是一整个轮回。而这一个单元用深度学习的术语来说就是批量&#x…

职升网:二级造价工程师的作用有很多!

一、专业知识与技能 二级造价工程师具备一定的专业知识和技能,能够独立完成工程项目的造价核算、合同管理和成本控制等工作。 二、重要角色 二级造价工程师在建设项目中扮演着重要的角色,能够提供专业的造价咨询和决策支持,为项目的顺利进…

华为OD机考一次没过,其他部门岗位机考考过且面试全部通过,因为有首次考试记录,无法有流程,有什么高招?

1.华为机考的规则其实前面的一文带你读懂华为OD已经和大家详细介绍了啥是OD了,我们在回顾一下整个应聘流程: 第一步投递简历(要找靠谱的HR太重要了) 这一阶段你要提供姓名、邮箱、手机号、身份证号码用于锁定,所以投递…

智慧未来,建筑自动控制系统助力

随着科学技术的不断发展,建筑自动控制系统已成为现代建筑不可或缺的一部分。该系统通过监控电气设备、空调设备、卫生设施,以及电梯、门禁和停车场的管理,完成了建筑物的信息管理和运行。控制系统和通信技术的应用为建筑自动控制系统的发展提…

豆包插件分享

前言 大家好,今天给大家分享一个国内版的ChatGPT,名字叫:豆包MarsCode 使用链接:点我开始学习 介绍: MarsCode 是豆包旗下的智能编程助手,提供以智能代码补全为代表的核心能力,支持主流编程…

Kubernetes部署并管理EFK Stack

Kubernetes Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 主要概念 Pod:在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Service: Service 是 将运行在一个…

初赛试题:2022年CSP-J1

先言 本次试卷 一:单项选择题(15题,每题2分,共30分) 1. 【答案】A 【解析】 类、结构体相关的都是C的面对对象,例如struct,union,string,vector等STL标准库 2. 【答案】C 【解析】 ABCD全部模拟一遍…

azure-search-openai-demo-csharp does not deploy correctly to azure clooad

题意:“azure-search-openai-demo-csharp 无法正确部署到 Azure 云中” 问题背景: I want to try the sample, which Microsoft provided about the azure search. “我想尝试微软提供的关于 Azure 搜索的示例。”GitHub - Azure-Samples/azure-searc…