如何在swift中以编程方式减少obj文件

Posted

技术标签:

【中文标题】如何在swift中以编程方式减少obj文件【英文标题】:How to reduce obj files programatically in swift 【发布时间】:2021-12-31 11:57:48 【问题描述】:

我想在 swift 中以编程方式减小我的 obj 文件的大小。

之前有人问过类似的问题,但对我没有帮助。

Reduce size of .obj file significantly

有谁知道如何快速做到这一点

【问题讨论】:

使用 -Osize 选项在 Swift 中编译 - 这会降低代码速度,但会产生更小的二进制文件大小。这是一个按大小优化的选项。如果命令行中存在其他-O... 选项,您还必须删除它们。 @Arty 我认为他们不是在询问已编译的目标文件.o。他们在询问 3D 模型文件格式.obj。完全不同的东西。 @Sweeper 是的,你是对的。我在询问 3d 模型文件。你有想法吗? 您是否尝试过其他答案的建议?您是否删除了所有不必要的格式以减小大小? 是,但没有找到解决方案。有关如何删除不必要的格式的任何建议? 【参考方案1】:

取决于您需要减少的原因是什么。如果您关心占用的磁盘存储空间或关心通过网络传输的速度,那么最好将其压缩,因为.obj 是一种文本格式,您可以获得很好的压缩。

我建议使用Zstandardcompressor/archiver,原因有三个:

    它的压缩率很高,接近LZMA(7-zip)的压缩率。

    它的解压速度高达1000-2000 MBytes/sec。解压速度与使用的压缩级别无关。

    它has API 用于压缩/解压缩,已移植到多种语言,包括 Swift。因此,您可以在输入 .obj.zst 文件时将解压缩合并到您的 Swift 程序中。

要从命令行以最大压缩级别对其进行压缩,只需执行以下操作:

zstd -v --ultra -22 --long=30 model.obj -o model.obj.zst

此外,如果您不打算在 Swift 程序中打开 .obj.zst,而是将其与其他程序一起使用,那么如果此类程序允许从 STDIN 流输入,那么您可以通过管道将 zstd 解压缩到该程序:

zstd -dc model.obj.zst | some_program.exe

【讨论】:

但这不适用于 .obj 文件。你有任何示例或演示吗? @FAAIZDAAG 我的回答提出了另一种方法。您想减少 .obj 文件,但我建议压缩/归档它们。我的答案取决于你为什么需要减少。如果您只想使用更少的磁盘空间或想要使用更少的网络带宽来发送您的.obj 文件,那么我的解决方案可以工作。但是,如果您有其他减少的原因,那么我的解决方案就不是所需要的。正如您提到的link 中所建议的那样,除了清理空白之外,不可能大大减小.obj 的大小。 @FAAIZDAAG 如果您正在编写/读取 Swift 程序中的 .obj 文件,那么您可以通过在 Swift 程序中嵌入 zstd API 轻松使用我的解决方案。然后您可以直接从您的代码中读取和写入.obj.zst 压缩文件。这样,您将减少目标文件的存储在磁盘上的大小。我重复一遍,我的 Answer 的方法完全不同,它没有建议如何减少 .obj,但建议您如何从 Swift 代码中即时归档/取消归档它们。我的解决方案将使 obj 文件减少 4-7 倍。 是的,它正在减小大小,但我正在开发一个应用程序,它将减小 3d 模型(.obj 或任何 3d 模型)文件的大小并提供相同的缩小文件。 @FAAIZDAAG 好的,如果您的应用程序只是为了减少 .obj 文件而不做任何其他事情,那么我的 zstd 归档解决方案当然不适合您。此解决方案仅适用于如果您正在开发使用 .obj 文件来渲染模型的应用程序的情况,那么这样的应用程序当然可以从动态读取 .obj.zst 文件的存档版本中受益,特别是如果考虑到 Zstd 可以以1000-2000 MBytes/sec 的速度即时解压。

以上是关于如何在swift中以编程方式减少obj文件的主要内容,如果未能解决你的问题,请参考以下文章

获取 Button 和 Textfield 数据,当它们在 swift 5 中以编程方式添加时

在 Swift 中以编程方式设置 XIB 文件的约束

sonarqube 混合 obj-c swift 项目,如何扫描代码覆盖率

如何在 Swift 中以编程方式将 UILabel 对象居中?

如何在 Swift 中以编程方式启用/禁用菜单对象

如何在 Android 中以编程方式增加和减少音量