TextureTailor自制Plist碎图工具

2023-11-15

最近在开发小游戏,美术资源是个令人头疼的问题,故搜寻了一些网上的资源文件,但是总被plist格式和png图片格式所困扰。在参考了一些大佬的代码后自制了一个符合我个人需求的小工具。

先放源码地址:TextureTailor
再来预览一下效果:

界面
分解后的目录
裁剪后的子图

特性:

  1. 由Python实现,开源可修改
  2. 支持主流plist和png纹理文件裁剪,支持format2和3(可查看plist文件中metadata字典中的format关键词)
  3. 支持目录内批量处理,导出为当前工作区的同名文件夹
  4. 目前执行文件仅支持Mac平台
  5. format3 spriteTrimmed字段支持

重点问题:

某些由ipa拆包得到的资源文件市面上大部分软件和脚本是不支持,原因是:
1.苹果打包成ipa时对图片进行了压缩

  1. 部分format3的plist格式进行了简化,无法识别

目前该脚本软件对plist文件的spriteTrimmed字段加以支持,可以解决plist格式问题

ipa拆包游戏资源png修复解决办法:

单张指令:

cd到工作区,把/other/pngs/old.png文件解压缩到/other/pngs/new.png

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -revert-iphone-optimizations /other/pngs/old.png /other/pngs/new.png

批处理单张指令:

下面就是把/Users/zhou/Desktop/mofiy/old/*.png 还原到 /other/newpngs 文件夹中)

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -dir /Users/zhou/Desktop/mofiy/new  -revert-iphone-optimizations -q /Users/zhou/Desktop/mofiy/old/*.png

原理:

iOS应用是,xcode会对PNG文件进行优化,这样图片预览就无法显示。那么如何查看这些经过优化的文件呢?
  优化的动作是由pngcrush 工具完成的,你可以再xcode中找到。pngcrush 支持命令行选项-revert-iphone-optimizations。
  这个选项可以支持撤销在xcode编译过程中进行的优化。所以,想要查看经过优化的文件,你应该先撤销优化,然后使用图片预览打开。
如果xcode并不是安装在标准的位置,你可以使用xcode-select查找到工具的位置:$ xcode-select -print-path

鸣谢大佬,参考文章如下:

【未完待续】cocos2d-x中的plist文件格式详解PlistDumpertp-png-split

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TextureTailor自制Plist碎图工具 的相关文章

  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • Android Gradle 问题 - Flutter / Dart

    我的 Gradle 同步有问题 我使用 IntelliJ 和 Android Studio 构建 Flutter Dart 应用程序 我添加了 2 个新的依赖项 现在 Gradle 出现了问题 在 Android Studio 中一切正常
  • 你如何在react-native中实现捏合缩放?

    我一直在研究 PanResponder 我当前的工作假设是 我将检测是否有两个触摸正在向外移动 如果是 则增加元素大小onPanResponderMove功能 这似乎是一种混乱的方法 有没有更顺畅的方法呢 如果您只需要简单的捏缩放功能 只需
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • ios 11 - UIBarButtonItem 内的 UIButton 导致自动布局错误

    我在将 UIButton 添加到 UIBarButtonItem 时遇到了一个已知问题 我尝试按照建议添加自动布局约束堆栈溢出 https stackoverflow com a 46336639 505603但我收到如下所述的错误 UIB
  • Jetpack Compose 中复选框中的透明复选标记

    在我的 Compose 应用程序中 我需要创建一个圆形复选框 我已经通过下面的代码实现了这一点 Composable fun CircleCheckBox isChecked Boolean modifier Modifier Modifi
  • 如何更改 UINavigationController 后退按钮名称?

    我有一个UIViewController我正在从第一个视图控制器导航到第二个视图控制器 我想更改显示在navigationcontroller为了回去 SecondViewController secondController Second
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 如何获取 UITableView 中的所有单元格

    假设我有一个包含多行的 UITableView 我想在某个时间点将所有 UITableViewCells 作为 NSArray 获取 我努力了 tableView visibleCells 但这种方法有一个问题 我无法拥有当前不在当前屏幕中
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • Android 4.4 Kitkat 自定义视图操作栏未填充整个宽度

    我试图拥有一个带有自定义视图的简单操作栏 但我得到以下结果 为了演示 我创建了一个带有黄色背景颜色的简单 xml 它应该占据整个宽度 这是 XML
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • android系统用户和linux root用户有什么区别

    当我将手机连接到电脑并使用adb shell与我的手机通信并输入的命令ps命令输出当前在我的手机上运行的进程信息 我发现有两个特殊用户 一个是root 另一个是system 据我所知 Android是基于linux的 所以root用户是最大
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • 如何从 Mac OS X 中完全删除 Eclipse(包括设置和插件)?

    我的 Eclipse 与 GAE 损坏并且工作异常 所以我从Application文件夹中删除了Eclipse 但是留下了垃圾 我重新下载了全新的 eclipse 但它以旧设置运行 并且损坏的 GAE 结构仍然存在 如何从 Mac 上完全删
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private

随机推荐

  • 雷达中和计算机视觉中的目标识别检测及跟踪区别在哪里?

    作者 梦里寻梦 苦瓜 编辑 汽车人 原文链接 https www zhihu com question 58615878 answer 2100196576 https www zhihu com question 58615878 ans
  • 漏洞复现- - -CVE-2016-5195 Dirty Cow脏牛提权漏洞

    目录 一 漏洞分析 二 形成原因 三 漏洞检测复现 1 编译poc 文件 2 复现漏洞 四 漏洞修复 方法一 方法二 一 漏洞分析 脏牛 Dirty COW 编号 CVE 2016 5195 是2016年10月18日被曝出的存在于Linux
  • VScode中js文件代码没有高亮问题

    问题 VScode中js文件js代码没有高亮 显示白色 解决方法 文件 gt 首选项 gt 设置 找到setting json 然后注释掉这段代码 重新打开文件 JS代码就有高亮了 白色看着实在别扭
  • python元组 列表 字符串最后一个下标_python字符串列表元组序列操作

    Table of Contents generated with DocToc python系列 字符串 列表 元组的操作 序列的访问及运算符 序列是为满足程序中复杂的数据表示 python支持组合数据类型 可以将一批数据作为一个整体进行数
  • 数据湖:设计更好的架构、存储、安全和数据治理

    问题导读 1 对数据湖有哪些预期 2 数据湖架构如何设计 3 如何做好数据治理工作 4 如何保障数据湖的安全 前言对任何业务来说 数据驱动的结果 预告和对趋势的预测都是必不可少的 今天 在我们所做的每件事中 都能看到某种分析的逻辑在背后 从
  • C语言输出3个整数最大值的案例教程

    思路分析 先比出2个整数的最大值 然后用最大值和第三个整数比较从而求出3个整数的最大值 我们今天用几种办法输出3个整数最大值 方法一 使用if else语句以及输入输出语句来编写 方法二 使用三元运算符以及输入输出语句来编写 方法三 使用自
  • JAVA 泛型的相关知识点

    泛型分为 1 泛型类 2 泛型接口 3 泛型方法 1 泛型类 定义 class Test
  • Python编程技巧和需要注意的地方——Pro

    目录 前言 1 多个大数字相加 2 同时访问多个相互关联的列表 3 访问列表的同时输出对应下标 4 熟练使用 和 5 关于类的get和set方法 6 熟练使用help和dir方法 7 什么时候使用set或dict而不是list 8 默认参数
  • 互联网大厂2021中秋礼盒pk,看完我又酸了……

    作者丨魏宇卓 来源丨运营研究社 ID U quan 马上又要到中秋节啦 每年中秋节 我最喜欢的就是吃着在便利店买的寒酸月饼 围观互联网大厂们在中秋礼盒上互相 battle 今年 大厂的月饼礼盒哪家强呢 我特地挑选了 10 家互联网大厂的中秋
  • 如何一次性批量打印PDF、Word、Excel、PPT和图片 - 文件批量打印工具

    一次性自动批量打印PDF WORD DOC DOCX Excel工作表XLS XLSX CSV PowerPoint PPTX PPT和JPG PNG TIF BMP图像 在日常工作生活中 我们时常需要通过打印机打印文件或照片 打印机都是逐
  • 【Unity Shader】概述以及Diffuse shader和unity5新功能Standard shader

    一 Diffuse shader介绍 Diffuse 即漫反射 可以想象成太阳光照射到某一个粗糙平面时 该平面向四面八方都会反射光线 这些光线中的某些光线会进入我们的眼睛 从而使我们看到这个平面 一个基本的漫反射光照模型 需要包括以下几个部
  • 0 基础 Java 自学之路(2023年最新版)

    目录 一 语言的选择 二 Java学习路线 三 学习资料哪里找 1 Java经典书籍推荐 2 Java经典视频推荐 3 经典博客推荐 四 如何规划时间 五 是否要报培训班 写了10多年的代码 之前做过某东的高级架构师 在技术这条路上跌跌撞撞
  • python-leetCode-给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数

    给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的 两个 整数 你可以假设每种输入只会对应一个答案 但是 你不能重复利用这个数组中同样的元素 示例 给定 nums 2 7 11 15 target 9 因
  • R语言编写函数

    基本思路参考此文章 http blog csdn net myl1992 article details 44936009 在这片博文中涉及到list相关知识 很受用 http blog csdn net u012543538 articl
  • Hudi 基础入门篇

    Hudi 诞生 Apache Hudi由Uber开发并开源 该项目在2016年开始开发 并于2017年开源 2019年1月进入 Apache 孵化器 且2020年6月称为Apache 顶级项目 目前最新版本 0 9 0版本 Hudi 一开始
  • JSONArray属性值的修改

    之前直接通过生成字符串后进行字符串替换实现的 实际上这里可能会替换调value的值中相同的字符 虽然概率很低 但是鉴于对个人的严格要求 还是严谨地修改了实现方法 主要基于如下的方法 public static JSONObject tran
  • VC++ 文件操作封装类

    头文件声明 SysUtils h pragma once include
  • 什么是模式识别,模式识别概念的基本介绍

    模式识别又常称作模式分类 从处理问题的性质和解决问题的方法等角度 模式识别分为有监督的分类 Supervised Classification 和无监督的分类 Unsupervised Classification 两种 模式还可分成抽象的
  • Python入门之类和对象

    对象 属性 方法 对象是类的实例 换句话说 类主要定义对象的结构 然后我们以类为模板创建对象 类不但包含方法定义 而且还包含所有实例共享的数据 封装 信息隐蔽技术 我们可以使用关键字 class 定义 Python 类 关键字后面紧跟类的名
  • TextureTailor自制Plist碎图工具

    最近在开发小游戏 美术资源是个令人头疼的问题 故搜寻了一些网上的资源文件 但是总被plist格式和png图片格式所困扰 在参考了一些大佬的代码后自制了一个符合我个人需求的小工具 先放源码地址 TextureTailor 再来预览一下效果 界