1
vicalloy 2022-02-23 16:10:11 +08:00 4
转 base64 ,大小会膨胀 1/3 。你确定转 base64 后最终压完后会更小?
|
2
3dwelcome OP @vicalloy 是的,就算膨胀后,也还是会比更小。
我的资源是 27 个 PNG 文件,在 PS 里直出,总共 104,325 字节。尝试用 ZIP 压缩,以失败告终。 写了一点打包代码,把 27 个 PNG 打包成一个 JS 文件,体积为 139,647 字节。 这时候用 zip 再次压缩,最终大小为 88,165 字节。 |
3
3dwelcome OP 我想了一下,应该是 PS 里直出,PNG 压缩算法有水分。但是因为算法冲突缘故,ZIP 是没办法直接去处理。
转换成 BASE64 后,就相当于变了一个维度,ZIP 算法又能再次生效了。 我知道很多人不信,一开始我自己也不信。但事实就是能压。 7z 极限压缩大小在 82k ,最终压成 88k 也不奇怪。 |
4
LeeReamond 2022-02-23 16:24:34 +08:00
@3dwelcome 生产意义是啥呢,你输出 webp,然后 base64 再压缩减小可能不错,png+zip 怎么搞都太大了
|
5
vicalloy 2022-02-23 16:26:27 +08:00
压缩率和图片内容有关系的。用 base64 ,是将 27 张图片作为一个整体压缩。
比如同一张图片你复制 27 份,用 PNG 格式大小是 1x27 。你转成 base64 再压,27 张图片的大小还是近似于 1 。 |
6
ScepterZ 2022-02-23 16:28:10 +08:00
有点意思,不过感觉是不是调调参数也能有类似效果,不懂压缩
|
7
3dwelcome OP |
8
weizhen199 2022-02-23 16:28:56 +08:00
对的,PS 上出的图片 PNG/JPG 都是,水分都感觉很大,至于是水分,还是别的地方出的被砍的太多。就不得而知了
|
9
vicalloy 2022-02-23 16:29:23 +08:00
说大小近似 1 是不对的,算法还没有这么智能。
|
10
adoal 2022-02-23 16:30:42 +08:00
@vicalloy 对……zip 是每个文件单独压缩后打包。可以测试一下原始 png 文件先打包(比如 tar ,甚至只为测试不为实用的话直接 cat 在一起)后再压缩。
|
11
rekulas 2022-02-23 16:31:25 +08:00
"把 27 个 PNG 打包成一个 JS 文件"
你可以再尝试下只打包不 encode 试试能否继续压缩 |
12
3dwelcome OP |
13
noe132 2022-02-23 16:35:32 +08:00
png 的压缩也有压缩级别的。只是大部分软件并没有给你一个调节参数。建议用 apngopt 压一遍,用 7zip 15 iterarions 以上
|
14
tsanie 2022-02-24 11:12:30 +08:00
我试了下 android sdk 里 paper-card 示例中的 5 张图片,应该是 png 压缩级别高且优化输出后的。
| 项目 | 大小 | | :---- | ----: | | 加起来大小 | 1,676,149 | | 7z 极限压缩 | 1,649,267 | | zip 打包 | 1,650,731 | | tar.gz | 1,651,711 | | base64 后 zip 打包 | 1,660,597 | | base64 后 tar.gz | 1,667,404 | 这个示例中 zip 直接打包反而是表现最好的了。 |
16
3dwelcome OP |