神奇压缩
A. Unity3D 手游骨骼动画有无什么神奇的压缩方式
帧动画的制作重点在美工方面,做完导入后编程方面对它的控制很少,改变播放速度,和另一贴图或纯色混合(比如实现渐隐效果)大概就这些。
而骨骼动画导入后,在编程上可以将多个动画片段进行混合或过渡,如
animation.Blend("FallDown", 0, 0.2);
animation.Blend("Jump", 0, 0.2);
就是将角色的下落和跳起动画混合,是它看上去既有跳起又有下落的姿态。
B. 文件是怎么被压缩的呀
提起压缩,大家都会想到WINZIP或者RAR之类的压缩软件,实际上,电脑压缩技术的内涵和应用绝不止于此。我们能够在在电脑上欣赏到精美的电影和悦耳的歌曲,压缩技术立下了汗马功劳。在今天互联网的传送速度远不能满足我们需要的时候,网络压缩技术也显得特别重要。正是有了它,我们才得以实现网络视频/音频的即时传送。压缩技术,在不知不觉中改变着我们的生活。
【预备知识】二进制与ASCII编码
电脑里基本的存储单位是字节。ASCII码是一种以字节为单位对常用符号进行编码的方案,因其合理性而较为流行。因为一个字节有8位,所以ASCII最多可对2^8=256个字符进行编码,其中前128个称为标准ASCII码(二进制编号00000000-01111111),后128个称为扩展ASCII码(二进制编号10000000-11111111),电脑里的汉字就是利用两个扩展ASCII码的组合来实现的(GB2312汉字编码方案)。比如汉字“王”占用的两个ASCII编码分别是205和245,十六进制表示是CD和F5,化为二进制就是11001101和11110101。也就是说,在电脑处理“王”这个汉字时,电脑里的信息是“1100110111110101”这样一串数字。再如大写的英文字母“A”的ASCII编码是65,十六进制表示是41,在电脑里的信息实际上是“01000001”。
【缩位压缩】
知道了上述原理后,我们来介绍“缩位压缩”的原理。“缩位”,就是缩减编码里没有必要使用的“位”。例如文件里一个汉字也没有,也就是说内容中没有使用扩展ASCII码,这样所有字符编码的第七位(最前面那一位)将都会是0。利用这一点我们就可以缩掉这一位,假设文件内容是ABCDEFGH。
文件内容: ABCDEFGH
二进制内容:01000001 01000010 01000011 01000100 01000101 01000110 01000111 01001000
压缩后文件内容: [该内容中文状态下显示是乱码,故无法写出]
二进制内容:10000011 00001010 00011100 01001000 10110001 10100011 11001000
这个压缩过程就是将原来顶头的0全部去掉后每8位重排,这样原来占用8个字节的文件就只占用了7个字节。只要解压时再加上第七位的0,文件就可以恢复原样。这一压缩技术特别适用于对数字的压缩。因为0~9这十个阿拉件数字占用的ASCII编码是从00110000-00111001,其前四位全部都是“0011”。
【直接压缩】
直接压缩的原理最易理解,因为有些时候,文件里不可避免地存在着连续同样的字符,比如在文件末尾加了一行“※※※※※※※※※※※※※※※※※※※※※※”符号。这样的话,压缩时可以只记住这个符号以及重复的次数,就可以迅速还原。
【字典压缩】
字典压缩是最重要的一种压缩技术,也是应用最为广泛的一种压缩技术。该技术搜索文件中重复出现的字符串,如“中华人民共和国”、“改革开放”等,记录后(记录后的内容被称为“字典”)在正文中使用另一个简短的编码来代替它。想一想Windows系统里充满了多少的“Windows”和“Microsoft”这些字符,你就会明白为什么这种压缩技术对Windows操作系统如此有效了。这种压缩方案对政治稿件和学术论文特别适用。
字典压缩技术无论对文本文件还是可执行的代码文件都同样高效,而且可以涵盖掉“直接压缩”技术。现在流行的ZIP,ARJ、RAR,AIN等压缩软件都采用了此项技术。但是此种技术中,合适的字典长度很重要,将字典设得太大或太小都严重影响压缩效果,且进行压缩时速度相对较慢。
多数压缩软件综合使用各项压缩技术。
【矢量压缩】
虽然字典压缩强劲有力,但是对有些文件内容还是无能为力,比如下面的内容:
啊雹玻长触郸锭法
这些看起来不成文的汉字实际上却有着内在的联系,它们分别是GB2312编码中的第1601、1702、1803、1904、2005、2106、2207、2308区位的汉字。对于这种情况,可以通过寻找它们之间的数学联系(如数列、方程等)进行记忆式的压缩。这种记忆式的压缩叫做矢量压缩,是一种正在兴起的新压缩技术。
矢量压缩有时可以带给我们意想不到的享受。很多人惊奇于FLASH能以如此小的体积带给我们如此丰富的信息,就是因为FLASH里使用了矢量压缩技术。使用方程记忆一个点的运动轨迹远比记忆这个点的所有位置信息量要小得多的多。但另一面,对于照片和录音这些资料,现在的矢量化技术还做不到从中找到即高保真又有规律的方案来,所以下一种压缩技术有了大显身手的空间。
【有损压缩与VCD】
VCD的产生要归功于联合图象专家组(JPEG)的努力。他们提出了一种全新的压缩技术标准,也可以说是一种全新的压缩概念。这种概念催化了运动图象专家组(MPEG)标准的诞生及VCD工业化的实现。JPEG图象压缩技术以图象的每8*8个点的点阵做为一个处理单元,在这个范围内,如果全部都是某一色彩而只有极个别的其他色彩,那么其他色彩将被忽略。这种压缩技术理论上的压缩比高达为64:1,一个64MB的文件现在只需1MB就可以了?这实在很令人心动。为了进一步扩展压缩效果和提高该技术的适应范围,JPEG做了灵活调整。允许用户自行设置处理单元的大小和忽略其他色彩的程度,这也就是为什么JPEG图像有“质量”属性的原因。
JPEG提出的这种“有损压缩”的概念使得该压缩技术有一定的局限性,比如说,JPEG不适合用来压缩工程图纸、医学影像等等资料。但其注重实用性的思路却大大启发了人们,RealPlayer就是沿着这条路率先实现了网上视频的实时播放。而VCD中剥离了图象的声音则也渐渐形成了流行的MP3音乐。(声音压缩的编码方案过于繁杂,本文未予论述)
【压缩文件缝隙】
除这些压缩技术之外,DOS/Windows系统本身也留给了大家一个压缩的故事。在DOS/Windows系统下,磁盘存储空间被划分成一小块一小块地使用,而不是象UNIX或者Novell那样在系统控制下所有文件都搅和在一起。这种开放式的磁盘文件使用格式虽然不安全(简直毫无安全可言),但是效率高,易操作。这可能也是DOS/Windows在家用和商用市场打败UNIX和Novell但在服务器领域却始终比不上他们的一个重要原因。——因为每个分配块只能供一个文件使用,所以即使文件(或文件的最后一块)只有一个字节,也必须占用一个分配块。因为当时只留了两个字节来分配这种存储块(两个字节是16位,这种分配机制叫做FAT16),所以不论分区有多么大,最多都只能被分为2^16=65536个分配块。比如说一个2GB的分区,其分配块大小是32KB;当分区超过2GB时,分配块将不得不增长到64KB。想一想,如果一个字节的文件也要占掉你的64KB时,你能够不恼火?所以从Windows 95 OSR2版本开始,Microsoft推出了FAT32解决方案。但是即使如此,“文件缝隙”依然存在。
Microsoft为了解决文件缝隙,曾在DOS 6.0时代推出过Double Space(DBLSPACE),后来改为DRVSPACE,这东西在Windows 95/98/ME上还依然存在。当时号称可以倍增硬盘容量,令大家激动不已,但是尝试过后高呼上当。原来Microsoft只不过是抄袭他人,使用了“虚拟卷”技术而已,该技术顶多可以省掉文件缝隙,对于整盘只放了一个大文件的用户来说简直毫无用途。
压缩文件缝隙现在有了一个较好的办法,那就是把不常用的文件用WINZIP打成一个包,尤其是大量的小文件和/或在FAT16的环境下,使用这一方法可以节省你很多的磁盘空间。但是无论如何,“文件缝隙”看来要在Windows系统中永远存在了。
【越压越大?】
文件会越压越大么?答案是:会的。因为压缩文件需要一个控制解压缩的文件头(文件格式及字典等),所以对已经“无以为压”的文件进行压缩时,将徒增一个文件头,文件当然会越来越大。另外,虽然压缩后的文件更省空间,更安全了(压缩文件可以加密而普通文本文件不行),但是如果一旦文件头损坏,整个文件将无法解压。所以压缩文件的文件头是很重要的。这跟刚才讲过的FAT格式与UNIX/Novell卷格式的差别比起来,倒是有相形之处。但如果大家的ZIP文件损坏,建议试一下DOS版的ZIP解压程序PKUNZIP,也许还可以解救一部分。
【可执行文件的压缩】
不但文档文件和数据文件可以压缩,可执行文件也可以进行压缩。致力于压缩技术的PKWARE Inc.公司在最早推出PKZIP软件时(大约是1990年的事情),就有三个主要程序,分别是PKZIP.EXE(压缩时用)、PKUNZIP.EXE(解压缩时用)和PKLITE.EXE(压缩可执行文件时用)。压缩可执行文件的过程很神奇,文件名并不会被改变,只是长度会变小。这样的压缩文件在执行时,会在内存中自我释放,然后重定位重加载再执行。因为电脑做起来是一瞬间的事情,所以几乎感觉不到文件被压缩过。在软盘盛行的时代,这个工具十分有用。
Windows下的程序现在是越来越大了,所以很多编程人都将自己的主程序进行压缩,一方面也可以起到防盗版的作用,着名的“Red Alert”就采取了这样的做法。随着互联网传播软件功能的发挥,很多软件被打包为可执行程序,点击后可以自行展开并进行安装,这些也都是可执行文件的压缩的例子。
【压缩技术的辨证分析】
站在历史的观点上分析,压缩技术是必然要灭亡的。我们现在看10前年的DOS时代,当时为了存储目的而实施的压缩工作现在已经淹没在海量的存储设备容量里。从理论上讲,压缩毕竟浪费了我们的时间与精力,如果存储空间足够,我们没有需要压缩的理由。考察现在的压缩目的,除了小部分是为了方便检索之外,目前大量的压缩是为了适应互联网慢吞吞的传送速度。那么,当网速能够满足我们随时将整个硬盘上的内容在网络上拖来拖去时,我们还需要压缩吗?当光盘的容量足够大时,我们还会容忍JPEG技术替我们扔掉那一两个色点吗?
但是哲学指导我们,事情总是在发展,总是有其另一面的特性,当容量不再成为压缩的目的时,传送成了我们压缩的另一个目的。又有谁能够预料,下一个压缩的目的会不会产生,而又将是什么呢?(全文完)
C. 压缩软件的原理是什么
计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助于理解文件压缩,请您在脑海里想象一幅蓝天白云的图片。对于成千上万单调重复的蓝色像点而言,与其一个一个定义“蓝、蓝、蓝……”长长的一串颜色,还不如告诉电脑:“从这个位置开始存储1117个蓝色像点”来得简洁,而且还能大大节约存储空间。这是一个非常简单的图像压缩的例子。其实,所有的计算机文件归根结底都是以“1”和“0”的形式存储的,和蓝色像点一样,只要通过合理的数学计算公式,文件的体积都能够被大大压缩以达到“数据无损稠密”的效果。总的来说,压缩可以分为有损和无损压缩两种。如果丢失个别的数据不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式MPEG、音乐文件格式MP3和图像文件格式JPG。
压缩原理
很多人都惊异于压缩技术的神奇,一个文件被压缩成一半大小,何以能无损还原呢?
早期使用的压缩技术都基于统计模型,到20世纪80年代初基于字典压缩的新技术才慢慢推广开来。
数据压缩包含了非常多的软件和硬件技术,这些技术各不相同,但是大多数压缩软件都是基于LZ77、LZ88算法并加以修正而成,而LZ77是字典压缩的起源。大家都知道一个文本文件是由一些单词组成,而且必定有重复现象发生,例如我们这里经常出现的“压缩软件”一词,压缩的原理就是在文件的头部做一个类似字典的东西,把“压缩软件”这个词放在“字典”中,并为这个词指定一个占较少字节数的编码,而文章中的“压缩软件” 一词均用此编码代替,以达到压缩的目的。当然压缩软件在实际运作中并非如此简单,还要使用一些看了就头痛的演算方法,在此就不一一细述。也许有人会问,文本文件可用字典技术,那其它文件怎么办呢。这就无须操心了,因为对于压缩软件来说,一个文件中的“数据压缩”一词和“@#¥%^” 是一样的,关键在于冗余码(重复部分)的多少。
压缩常识
按压缩方式分:有所谓的“透明压缩”和“打包压缩”。
“透明压缩”一般针对.exe和.com文件,直接压缩。成功的话,文件体积变小,功能不变,运行速度还可能更快。但是,这种压缩方法的对象面很窄。如果压缩失败,还会造成文件不可用。所以,这一类程序总是强烈要求用户在压缩前将文件备份。
“打包压缩”就是现在常提到的压缩软件使用的压缩法。它把一个或多个文件压缩成一个文件——压缩包。要使用压缩后的文件,必须先解压将文件复原。它的特点是风险小,适用于减小不常用的文件所占空间和传输数据。当然,按照压缩算法,我们还可以将压缩分成很多种。
一般我们在谈到压缩时,会提到许多相关术语,下面我们就提出一些常见的术语进行解释。
压缩格式:压缩文件时使用的压缩编码方法不同,压缩生成的文件结构就不同,这种压缩文件结构就称压缩格式。
压缩比率:文件压缩后占用的磁盘空间与原文件的比率称压缩比率。在常用的压缩格式中,RAR格式压缩比率较高,ZIP格式较低。但ZIP格式的文件操作速度较快。
解压:将压缩文件还原为本来的文件格式,也称释放、扩展。
压缩包:一般将通用压缩格式的文件称为压缩包,如ZIP格式压缩文件。这种文件可以在压缩工具的管理下对包中压缩的文件进行管理,如查看、删除、添加等。
打包:将文件压缩成通用压缩格式的压缩包文件称为打包,也指将文件压缩添加到压缩包。
多卷压缩:将压缩的文件包分成几个压缩文件称为多卷压缩,一般是为了将压缩文件储存在多个软磁盘上或方便网上传输。
自解压文件:将文件压缩生成可执行的文件,然后在没有压缩工具的帮助下,通过执行压缩的文件,就可将自己的源文件解压还原出来。
压缩文件格式
目前流行着多种压缩文件格式,下面我们就来看看到底有哪些吧!
ZIP:目前最流行的压缩文件格式(在Internet上,ZIP文件已经取得了绝对胜利。在日常操作中,除专门的压缩软件之外,许多文件管理程序,如Windows Commander等也都支持ZIP格式)。我们可利用WinZip对ZIP文件进行解压、释放等操作,还可以用它来处理ARJ、ARC、CAB、LZH等多种不同格式的压缩文件,从而大大地方便了用户的操作。
RAR:是一种高效快速的文件压缩格式,但不被大多数文件压缩程序支持,WinRAR是在Windows下处理RAR格式文件的最好工具。
ARJ:由DOS下曾经红极一时的压缩软件ARJ压缩而成的文件格式,它具有功能强大、压缩率高等优点。到了现在的Windows时代,它已经没有了往日的辉煌。
CAB:是Windows 98新增的一种特殊压缩文件格式,主要用于对有关软件安装盘中的文件进行压缩,其特点是压缩率非常高(可能是目前最高的),但一经压缩就不能再进行任何增加、删除、替换等修改,也就是说它的压缩包具有“只读”属性。我们也可使用WinZip对CAB压缩包进行操作。
??_:软件安装盘所采用的一种压缩文件方式,如*.ex_、*.dl_、*.d3_等,它们一般由系统直接解压并完成安装工作,无须用户操心。当然,我们也可使用DOS的EXPAND命令对*.??_文件进行释放操作。
UU/UUE:汉字编码方式,它们原本是Unix系统中使用的一种编码方式,后来被改写到DOS中,我们在传送中文邮件时只须事先使用该方式进行编码,此后就能顺利通过只能处理7位编码的邮件服务器,从而解决了汉字的传输问题。
ACE:一种新式的压缩程序,压缩比很高。
另外,MP3、MPEG、JPG等音频、视频、图像格式的文件也都采用了压缩技术,从理论上来说它们也应该算压缩文件,不过它们所采用的压缩方式并不相同,这里简单地介绍一下:
JPEG:JPEG 全名为 Joint Photographic Experts Group,它是一个在国际标准组织(ISO)下从事静态影像压缩标准制定的委员会。它制定出了第一套国标静态影像压缩标准:ISO 10918-1 就是我们俗称的JPEG了。由于JPEG优良的品质,使得它在短短的几年内就获得极大的成功,目前网站上80%的影像都是采用JPEG的压缩标准。
JPEG 2000:正式名称为“ISO 15444”,同样是由JPEG 组织负责制定。JPEG 2000与传统 JPEG 最大的不同,在于它放弃了JPEG所采用的以离散余弦转换为主的区块编码方式,而改以小波转换为主的多解析编码方式。其压缩率比 JPEG高约30%左右,同时支持有损和无损压缩,无损压缩对保存一些重要图片十分有用。
MP3:这个大家应该都认识它了,MP3全称是MPEG 1 Layer 3,是一种高性能的声音压缩编码方案,它可以做出超小“体积”的音乐文件,大小只是原始音频数据的1/10到1/12。但人耳听起来,效果却没有太大差异。它一出世就几乎占领了电脑音乐领域,由于MP3的出现,过去在因特网上半小时才能下载完的一首歌曲,现在以MP3格式仅需短短的几分钟就可以“搞定”。
MPEG:MPEG是Moving Pictures Experts Group(动态图像专家组)的缩写。
现在使用的有4个版本:MPEG-1、MPEG-2、MPEG-3、MPEG-4。