您现在的位置:首页 >> 污染防治

iOS 中都的 PNG

时间:2024-01-17 12:19:47

e"; }}

Xcode 通过从换取明文年表之中面所有后缀为 .png 的图表明文,南至北可执行 Apple 变来得 pngcrush 物件,便次获得 Apple 所需的 PNG 图表。

我们以前文章的牛图作为所必需的证明案例

xcrun -sdk iphoneos pngcrush -q -iphone -f 0 image.png image1.png

去掉 -q 参近,可以看到这个全过程的一些电子邮件:

xcrun -sdk iphoneos pngcrush -iphone -f 0 image.png image1.png | pngcrush 1.6.4 | Copyright (C) 1998-2002,2006 Glenn Randers-Pehrson | Copyright (C) 2005 Greg Roelofs | This is a free, open-source program. Permission is irrevocably | granted to everyone to use this version of pngcrush without | payment of any fee. | Executable name is pngcrush | It was bUIlt with libpng version 1.2.7, and is | running with libpng version 1.2.7 - September 12, 2004 (header) | Copyright (C) 1998-2004,2006 Glenn Randers-Pehrson, | Copyright (C) 1996, 1997 Andreas Dilger, | Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc., | and zlib version 1.2.11, Copyright (C) 1998-2002 (or later), | Jean-loup Gailly and Mark Adler. | It was compiled with LLVM Apple LLVM 12.0.5 (clang-1205.0.19.59.6) [+internal-os, ptrauth-isa=deployment-target-based] and modified by Apple as indicated in the sources. Recompressing image.png Total length of data found in IDAT chunks = 144033 IDAT length with method 120 (fm 0 zl 9 zs 1) = 215970 Best pngcrush method = 120 (fm 0 zl 9 zs 1) for image1.png (49.94% IDAT increase) (49.76% filesize increase) CPU time used = 0.064 seconds (decoding 0.008, Encoding 0.042, other 0.013 seconds)

图表一般来说从 144033 缩小踏入 215970,「Compress PNG Files」 的并不一定就是重写全过程之中面 Apple 借助 pngcrush 来解决状况所必需用作的 PNG 图表,以便 iOS 该平台较快地用作图表。

你可以将明文替换成到工程目录之中面而不是 「Assets Catalogs」 之中面,然后框架出 ipa 包被,借助 pngdefry[8]和 pngcheck[9] 分析图表。

pngcrush字面上

Apple **变来得的 pngcrush ** 物件主要有两种法则:

编码号令:xcrun -sdk iphoneos pngcrush -iphone

号令:xcrun -sdk iphoneos pngcrush -revert-iphone-optimizations

图表存储

在 iOS 减包被的 Tip 之中面,我们知晓到能源状况是冲击包被一般来说的主要部分,而图表能源是开发全过程之中面最类似于的。用作正确的图表存储物件必须有助于进到行减包被。

都将和都将存储

类似于的存储物件有 tinypng,pngquant,ImageAlpha、ImageOptim、pngcrush、optipng、pngout、pngnq、advpng 等,根据其存储方式分成两大阵营:都将和都将存储

根据资料显示,tinypng、pngquant、ImageAlpha、pngnq 都是都将,基本运主要用途的都是quantization演算法,将 24 位的 PNG 图表变换为 8 位的 PNG 图表,减少图表的粉红色近;pngcrush、optipng、pngout、advpng 都是都将存储,运主要用途的都是基于 LZ/Huffman 的DEFLATE 演算法,减少图表 IDAT chunk 区域的近据。一般都将的存储率亦会大大优于都将存储。

存储物件

对于项目之中面类似于的背景图、占位图和大的标签图来说,推荐用作一般而言两种物件

TinyPNG4Mac:借助 tinify 提供的API,目前 tinify 的免费版存储近量是单词不超过 20 张且一般来说不超过 5 M。对于一般的 iOS 应用程序来说,能够日常开发的用作ImageOptim-CLI:自动在此期间可执行存储率较高的为 ImageAlpha 的都将 加上 ImageOptim 的都将存储。

可以通过查询这个表格对比 TinyPng 和 ImageOptim-CLI 。

对于小图来说,例如我们类似于的 icon 图标来说,我们通过转变其非标准为 RGB with palette 来超出图表存储效果。你可以用作 ImageOptim 转变图表的非标准为 RGB with palette。

imageoptim -Q ----no-imageoptim ----imagealpha ----number-of-colors 16 ----quality 40-80 ./1.png

通过 Palette Images 深入知晓 palette,也就是便是的可选演算法。

Xcode负简化

我们一般用作 Assets Catalogs 对图表能源进到行管理。其亦会依赖于对应的简化方式

在框架全过程之中面,Xcode 亦会通过自己的音频重新对图表进到行解决状况。在框架 Assets Catalogs 的重写盐 Assest.car 的全过程之中面,Xcode 亦会用作 actool 对 Assets Catalogs 之中面的 png 图表进到行,由此赢取 Bitmap 近据,然后便善用 actool 的编码音频进到行编码存储解决状况。所以不转变非标准的都将存储法则便次的包被一般来说来说,可能会并未什么功用。

对同一张图表,在完全相同电子元件、iOS 该系统上 Xcode 运主要用途了完全相同的音频这也所致了下载时候完全相同的电子元件针对图表经常出现一般来说的区分。

借助 assetutil 物件分析 Assest.car 来赢取其确切的存储法则

sudo xcrun ----sdk iphoneos assetutil ----info ***.app/Assets.car> ***.JSON

主要关注一般而言字段 Compression 、Encoding、SizeOnDisk。

Compression 存储法则,针对完全相同电子元件、iOS该系统,其存储法则都是完全相同的Encoding 非标准SizeOnDisk 最精准图表一般来说 { "AssetType" : "Image", "BitsPerComponent" : 8, "ColorModel" : "RGB", "Colorspace" : "srgb", "Compression" : "deepmap2", "Encoding" : "ARGB", "Name" : "image", "NameIdentifier" : 51357, "Opaque" : false, "PixelHeight" : 300, "PixelWidth" : 705, "RenditionName" : "image.png", "Scale" : 1, "SHA1Digest" : "294FEE01362591334E3C3B4ECE54AF0EA8491781", "SizeOnDisk" : 113789, "Template Mode" : "automatic" }

如果启用 APP Thinning 来生成完全相同电子元件的 ipa 包被,然后针对每个 ipa 包被都进到行一次解存储,并换取其之中面的 Assets.car 假设对应的 assets.json 似乎有些冗余,你也可以借助邓州超市的 APP 护肤实践中之中面明确指出的 assetutil 的法则从通用包被的 Assets.car 明文假设指定电子元件的 Assets.car 明文

sudo xcrun ----sdk iphoneos assetutil ----idiom phone ----subtype 570 ----scale 3 ----display-gamut srgb ----graphicsclass MTL2,2 ----graphicsclassfallbacks MTL1,2:GLES2,0 ----memory 1 ----hostedidioms car,watch xxx/Assets.car -o xxx/thinning_assets.car

对瘦包被来说,去掉到工程的图表一般来说并无法确实体现出其对框架包被的冲击。请牢记「图表的确实的一般来说是其在 ipa 的一般来说」——包被括替换成进到 「Asset Catalogs」 之中面的图表便次被转用.car 明文,其余是在包被之中的图表、各种 bundle之中的明文。

存储的危害

不要自觉的追求较大的存储比,既必需考量存储出图表的恒星质量,也必需考量经过 Xcode 便次密切相关明文的确实一般来说。

存储完成的图表尽量在高分辨率的电子元件上看看亦会才亦会有什么状况,让 UI 好好看看,亦会才亦会经常出现噪点、毛边等震荡。

如果一个图表经过都将便次所致其在 Assets.car 之中面 SizeOnDisk 参数越发很大的话,但其在各个电子元件上的表现状况又挺好,你可以尝试将其加到 bundle 之中面用作,并将其图表XML变来得为 Data,这样 Xcode 就才亦会对齐进到行存储解决状况了。不过不要忘了将调用法则改为 imageWithContentOfFile:。

![](_images/main/截屏2021-06-25 17.44.37.png)

![](_images/main/截屏2021-06-25 17.45.03.png)

在这之中查询图表存储 [10] 来得多观点系统化。

jpg 变换成 png

在 Assets Catalogs 之中面替换成的 jpg 明文,在便次的 .car 明文之中面亦会变换成 png XML

当我们跟 UI 要图表时,如果 UI 扔给你一张 .jpg 或 jpeg XML的图表,你亦会专业的道出,最好给我 PNG 图表,否则该系统亦会生成踏入 PNG的。

首页,我们去掉到工程目录之中面的 JPG 图表框架之前才亦会经过「任何存储」且其在包被之中面的「XML才亦会变来得」。

而对于替换成进到Assets Catalogs 之中面的 JPG 图表,我们必需解包被.car 明文,我们以前面的证明 JPG 图表为例,其素材名称和明文名称都为 Untitledlogo。

借助 assetutil 物件赢取对应 JSON 的部分:

{ "AssetType" : "Image", "BitsPerComponent" : 8, "ColorModel" : "RGB", "Encoding" : "JPEG", "Name" : "Untitledlogo", "NameIdentifier" : 16638, "Opaque" : true, "PixelHeight" : 300, "PixelWidth" : 705, "RenditionName" : "Untitledlogo.jpg", "Scale" : 1, "SHA1Digest" : "8AD0802190689DEC7778A28EEFFBE972F4121B5B", "SizeOnDisk" : 68122, "Template Mode" : "automatic" }

多近逆向 .car 明文的物件,都是借助 Apple 的公用库 CoreUI.framework 模拟 Apple 访问图表的全过程然后借助 pngcrush 「稳定下来」其之中面的 PNG 图表。并不一定是用 CoreUI.framework 之中面的 CUICatalog 分离出其章节。

;也用作的是Asset Catalog Tinkerer,选择我们的证明的 Assets.car

然后借助其假设特性,假设图表:

所得两张「PNG 图表」,是的,是两张被过得 PNG 图表

来得多物件可以参照 Analysing Assets.car file in iOS [11] 之中面所明确指出的物件以及QuickLook 的仿真 .car 明文插件 [12] ,很多物件都是开源代码,可以查询确切查询。

总结

在项目之中面用作 PNG 或其他XML图表能源时,必需考量其对整体包被一般来说的冲击。对于替换成进到工程之中面的 PNG 能源,APP 都亦会对其进到行解决状况,以便来得较快的读取。

替换成进到 Asset Catalog 之中面的 PNG 图表,都将存储的 PNG 图表在其便次框架之中面,其存储方式可能会并并未什么功用,但是都将的话,可能会与 Apple 本身的存储法则起冲突 ,所致负简化。

总的来说,如果是 Asset Catalog PNG 图表能源来说,一般不必需执意存储的。

概要

CgBI_file_format:_file_format

抖音品质建设 - iOS 安装包被一般来说简化实践中篇:

今日牛条 iOS 安装包被一般来说简化 - 新一轮、新实践中:

PNG图表存储对比分析:

TinyPNG4Mac:

ImageOptim-CLI:

Portable Network Graphics (PNG) Specification (Second Edition):

pngdefry ‒ Repairing -iPhone fried PNGs:

pngcheck:

Chapter 9. Compression and Filtering:

Analysing Assets.car file in iOS:

QuickLook 的仿真 .car 明文插件:

Asset Catalog Tinkerer:

波比宁
江中多维元素片
宝宝拉稀了怎么办
吃杂了拉肚子怎么办
肠炎宁和思密达哪个好