zip, unzip (zipinfo) 压缩级别问题

2020-08-10 08:39:13 +08:00
 lxk11153
1922 次点击
所在节点    问与答
8 条回复
cheng6563
2020-08-10 09:07:45 +08:00
用 zip 就是奔着速度而不是压缩率去的,所以没人设置这个了
sNullp
2020-08-10 09:09:03 +08:00
1 和 9 只是在压缩的时候用多复杂的字典和一些别的参数,从解压缩的角度来说算法是一样的。
tairan2006
2020-08-10 09:14:54 +08:00
这就跟你用 bcrypt 加密一样,10 遍或者 20 遍,只是计算量不一样,解密的时候都是同一个算法啊。
lxk11153
2020-08-10 09:17:28 +08:00
@cheng6563 #1 用 zip 就是举例,换其它算法也有可以套在这问题上的吧
chenset
2020-08-10 09:31:43 +08:00
zip 格式文件头(文件的前几十字节)里面有一大段个描述信息的. 类似 TCP/HTTP 都是在文件头里面保存着很多这些参数
no1xsyzy
2020-08-10 13:57:31 +08:00
应该是没有存储具体值的,首先 zip 本身会表述算法,但子算法很可能不会表述
man zip
...
-#
...
Though still being worked, the intention is this setting will control compression speed for all compression methods. Currently only deflation is controlled.
可知 deflation 算法才可以控制

man zipinfo
...
Finally, the sixth field indicates the compression method and possible sub-method used.
看得出具体的子算法是 `possible`,即推测出的。

实际上生成了 cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 100K | cat > file
然后 for i in {1..9}; do zip -$i v$i.zip file; done
测试的结果上来说,
zipinfo 指示 v1..v2 是 defF,v3..v7 是 defN,v8..v9 是 defX,都是 deflation 算法。
压缩结果大小上来说,v1>v2=v3>v4=v5..=v9
diff 的结果,v8==v9,v4==v5==v6==v7
就这样吧

顺便一提,zip -v 显示 2008,zipinfo -v 显示 2009…… 十年没更新了……
impl
2020-08-10 14:51:27 +08:00
zip 只是封装格式,默认用 deflate 算法。
msg7086
2020-08-10 15:58:51 +08:00
压缩级别是指用多大的力气去从原始数据里抠掉冗余数据。

用视频压缩来举例子。比如说第一帧画面上有一只猫。第二帧这只猫往左移动了 1 像素。第三帧这只猫往左又往上移动了 1 像素。第四帧这只猫往左移动了 30 像素。

假如你的视频压缩算法没有动态搜索功能,那么每一帧都要单独画出一张猫来,就相当于 4 张图片连在一起,4 倍的大小。

假如你的算法能做上下和左右 1 像素的动态搜索,那么第二帧的图像就可以被搜索到是第一帧移动后的结果,那么第二帧就可以只保存残差而不需要保存完整的图片了。

假如你的算法能做上下左右和斜线 1 像素的动态搜索,那么第三帧的图像也可以搜索到动态矢量了。

假如你的算法能做整个画面所有像素的动态搜索,那么第四帧就算是差了 30 像素也可以搜索到动态矢量了。

第一种算法处理一下只要 5 毫秒,第二种要 10 毫秒,第三种要 20 毫秒,第四种要 1000 毫秒。

至于解码,当然只需要根据图片和动态信息来还原数据就行了,不管是差 1 像素还是差 30 像素,还原的过程都是一样的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696943

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX