估计上回分析EMF文件还不过瘾,这回突然有兴趣想把docx里面的图片给挖出来。用RIA来实现,B/S模式的服务还是比较方便的。
1,从docx说起,改了后缀为zip就可以看到里面有啥东西了。图片就放在word/media文件夹下,图片的其他信息放在word/document.xml里面。对于ooxml,用的时候再去看那些节点是什么意思,这样理解得更快点,不适合闲暇时玩弄。docx大概就这样,对它不太有兴趣。
2,从fzip说起,开源库,compress和decompress文件。这个开源库用了个编码技巧,代码如下:
parseFunc为function类型,一个while里面跳了parseHead,parseExt,parseContent几个函数后再结束,也就是等于把zip里面的每个压缩文件的文件头和数据,扩展字段都跑了一遍。和代码大全里面提到的索引方法类似,可以修改一下之前写EMF文件分析的几个很突兀的if else if格式。用fzip很快就把docx里面的图片给取出来了,不过这样做下去也没太多意思,但如果不用fzip,直接手工取出来会是咋样的。
3,deflate,zlib
网上的一撮撮的代码都是用AIR实现的,大部分zip都是用deflate来压缩的,所以把数据部分取出来后,直接一个uncompress("deflate")就处理完了。没啥高明之处。而用RIA,就好玩了。RIA只对ZLIB做处理,也就是大部分zip都无法用RIA直接解压。而deflate和zlib核心部分是相同的,而zlib比deflate多了2个头字节和尾部一个4字节的校验码,这样把数据部分抽取出来后,加上个头和尾,然后用uncompress就可以解压。如果没有理解错压缩数据这部分,应该能解出来,但是实验结果却还是报出解压错误。再看回fzip里面的东西,zlib的校验码是_adler32,而这个adler32却是在扩展字段里面读取的,大部分zip的扩展字段还都是为0.所以得出结论,做了件挫事。用deflate格式来压缩的话,就只能用deflate来解,其他格式信息不足,显然就不能用其他格式的函数来解。挫!
4,fzip,压缩数据算法
这个开源库很不错,以及一个压缩数据这一块还是狠吸引人的。学习里面的全部时间上估计不太实际,学里面的部分,有些时候还是可以做到。多做些挫事,多长些智慧。
附上一些查过来的网址 :
gzip原理与实现:
http://blog.csdn.net/FringeDream/archive/2005/12/08/546890.aspx
压缩算法deflate
http://hi.baidu.com/ͼ%BA%BC%BFƼ%BC/blog/item/b2d1731812146eb34bedbc5b.html
flex zlib压缩数据包格式
http://wenyu.csai.cn/user1/24996/archives/2009/37782.html