作者:马健 3 g- T. z+ H, q- h1 G邮箱:stronghorse@tom.com2 T/ W8 z9 g( ?0 R
主页:http://stronghorse.yeah.net + I% q. y. j* I" U3 K发布:2006.07.160 [" _/ g9 E1 O2 U; O
更新:2006.07.20 L+ _9 ^, i; {. t. K+ j
, ?; n& E `! I) K$ C9 }3 e事先声明: 1 Y H1 s. s( m$ H3 w4 P' ^& f( c' {! j2 P; [+ N) r4 S- n! ~
PDG文件是超星公司电子图书的专有格式,需要用超星公司的专用浏览器才能阅读。本文讨论PDG转PDF的方法,仅出于技术研究目的,并无意对超星公司的版权进行任何形式的侵犯,也不希望任何人用本文讨论的工具或方法从事侵权活动。如果需要浏览PDG电子书,请通过购买点卡等方式,以合法的途径获得。本文 认为用户通过合法的手段获得PDG文件,只是由于希望能够在比超星浏览器更好、更方便的浏览器上阅读,并且不对转换出来的文件进行扩散的情况下,才需要将PDG文件转换成PDF文件。 * [4 x5 B. w. F; ^$ b: L本文所说PDG,是指最常见的纯图像格式PDG文件,不包括罕见的文本、PDF、HTML等格式的PDG文件。 9 Y& o U) a1 Z& x) p0 n, |& s对于标题所提问题,我的回答是:大多数情况下转换后文件长度应该相当,略有增加或减少,质量应该保持不变。如果文件长度、画面质量差很多,多半是用错了方法或软件。本文将说明理由。 * x1 A# J2 e2 s ) }9 i- y0 Y% V/ E2 E1 r8 o注意在上面的回答中我使用了“大多数”等表示概率的词汇,因此在讨论答案之前,需要先对PDG文件格式进行分类,并估计每种PDG文件出现的可能性。7 e4 j" m- [7 q1 v* A) N7 C3 }6 Z
9 P; v4 G2 e. w ^3 a/ s4 T. k& U目前比较流行的分类方法是按照PDG文件第16字节分类,通常PDG文件格式检查软件都是按照这个字节的16进制报告文件类型,如00H、02H、03H、04H、05H、10H、11H、AAH、ACH、64H、66H等等。由于这种分类法分出来的类型较多(理论上有256种),所以通常也按字节高4位进行归类,简称0xH、1xH、AxH、6xH等。0 b6 D Q" i8 z+ a, t8 d
1 o8 E! _( d+ p( L( o5 F$ |5 n
这种分类方法可以表示出PDG文件的加密特征:+ |+ V( ~9 H2 U, r9 E! |
, R) y' O! O+ t& `6 ^% r
00H是最早,也是最原始的PDG格式,其格式为:PDG文件头+原始图像数据流。原始图像数据流包括CCITT G4(黑白图像)、JPG(彩色/灰度)、DjVu(黑白/彩色/灰度)。在超星服务器上,这种格式的文件已经非常少见,但是由于这种格式阅读的时候不需要解密,因此阅读 时的速度感觉比其它格式的要快,所以也有人用第三方软件自己将其它格式转换成00H格式。$ q/ t% R2 U8 @# q+ T
0xH是对00H的弱加密格式,通常02H、03H用来加密CCITT G4图像,04H加密JPG,05加密DjVu。顺便说一句,可能是为了尽量减小文件长度,超星在压制DjVu时,用的都是有损压缩,可能会对汉字笔划造成损伤,这也是为什么经常听到有人说05H不如02H清晰的原因之一。 4 F; O p; ~0 L1xH是比0xH更强的加密,加密方法不再与原始图像格式对应,如11H可以加密CCITT G4,也可以加密JPG、DjVu。/ o" d6 @0 B3 H
AxH的加密强度比1xH更强,加密方法也不与原始图像格式对应。正版超星浏览器如果下载到AxH格式的PDG,会将其完全破坏后变成FFH格式的PDG。 : h; b$ L; `4 g4 \6xH是正版超星浏览器从服务器下载到PDG文件后在本地加密生成的文件。由于6xH加密使用了本地硬盘“指纹”,因此只能在下载的机器上看,换一台就不能看。+ p0 T) x! n" ]
但是加密方法毕竟是超星自己的事,用这种分类方法往PDF格式上套未免有点难。所以我更愿意用另一种分类标准:超星浏览器自带的Pdg2控件的GetImageType方法的返回值。这个方法通常返回1、2、3,在Pdg2Pic中分别用T1、T2、T3表示,即Type1、Type2、Typ3的意思,分别对应三种图像:: q$ L' p0 ~3 o9 G+ K
, R8 x8 {" p. c: v5 U/ l
T1:黑白图像,原始图像格式为CCITT G4或DjVu。 1 X. Z0 A6 _# K4 M# e0 h; YT2:灰度/彩色图像,原始图像格式为JPG或DjVu。可能超星觉得扫描时区别灰度、彩色太麻烦了,所以灰度图像一律按彩色存储,这 也是国内扫描外包商的通常做法,但是对技术较真的客户一般会要求外包商举行区别。 1 g8 K1 f0 K" r" I0 AT3:多层图像,底层黑白文字层通常用CCITT G4,上层插图用JPG。我猜测这种类型应该是在DjVu基础上发展出来的,符合“按需存储”的原则:对于重要的文字层使用无损压缩,对于相对不重要的插图则用有损压缩存储。 + m$ y, u! c% u1 e8 G0 v9 ]从出现的概率来说,这三种格式按从高到低排列依次是T1、T3、T2:6 ~ ]+ D2 ~! N) a
: P) N/ B L0 ?2 O1 }- U. A/ ?
最常见的格式还是T1,毕竟大多数书籍都是白纸黑字。 1 v; h3 S* u3 M- l- c* {T3出现的概率比T1小,一般用于图文混排的插图页,或某些彩印书籍。 0 }9 ^* c4 R1 D0 V2 IT2出现的概率最小,毕竟除了封面和某些特殊书籍外,整页都是图的情况在一本书里也不会有几页,而封面、封底还有很大一部分直接用JPG文件存储。0 f3 Y- h3 q2 N- `/ `
在转换成PDF时,正常情况下这三种格式与PDF中压缩算法的对应关系为: 5 c& b+ G2 Y+ v: F# ]+ v 5 i/ M7 b( s& i9 r6 P: `T1:CCITT G4或JBig2。 . ]* b: T3 R N* K. i. V$ TT2:JPEG或JPEG 2000。 5 E4 q; m9 y9 O& xT3:这个比较复杂,取决于转换软件:可以转换成多层PDF,也可以将PDG中的所有层合并成一个图像再放入PDF。4 G: T9 \. z$ ?. Q1 O; {* ~% _
如果T1原始图像是CCITT G4,转换成PDF的CCITT G4后文件尺寸会略有膨胀,因为PDF文件本身要增加一些必要的格式信息;如果转换成PDF的JBig2,通常文件尺寸不会增加,只会减少,毕竟JBig2的压缩算法要比CCITT G4更先进。 ! c5 @$ m/ U) P# m; p; S 2 R3 E0 d. K" o# G# Z |如果T1原始图像是DjVu,转换成PDF的CCITT G4后文件无疑将会膨胀;转换成JBig2则取决于是有损JBig2还是无损JBig2。理论上说,DjVu对黑白图像的压缩能力与JBig2相当,但由于超星用的全是有损DjVu,因此转换成PDF时只有选有损JBig2才能保持二者尺寸 大致相当,选无损JBig2则会造成文件膨胀。由于有损压缩会对汉字笔划造成损伤,因此我宁愿文件长度膨胀,也不愿选择有损。 & I4 k; N# ~; \ 5 Y* p) g. J# Q+ E如果T2原始格式是JPG,转换结果取决于转换软件:如果转换软件能够直接从PDG文件中提取原始JPG数据流嵌入PDF,则PDF文件只会略有膨胀 ,质量不变;如果转换软件非要把PDG先解码成BMP再压缩成JPG或JPEG 2000放到PDF里,文件长度可能增加也可能减小,取决于所选的压缩比,但是在缺省的压缩比下,质量下降是注定了的。 ; G; H; l6 v' \; C. ~ ( k* G# d) |+ A6 a' G( p如果T2原始格式是DjVu,用于目前的PDF规范不支持DjVu(不排除将来会支持),因此只能将DjVu先解码成BMP再压缩成JPG或JPEG 2000放到PDF里,文件长度可能增加也可能减小,质量多半会下降。 # L5 U3 F) h0 J 8 a1 D/ } z `8 c7 \0 ?" T# \' \- l对于T3,如果转换软件能够直接从PDG文件中提取原始JPG数据流嵌入PDF文件,并且用无损JBig2压缩原CCITT G4图像,则PDF文件尺寸会减小,同时质量不变;如果转换软件非要把多层合并成一层,再压缩成JPG或JPEG 2000放到PDF里,通常文件长度会增加,质量会下降:JPG或JPEG 2000都不适合压缩文字图像。# W2 ^& Z( W9 ]
' K5 H. S! C5 ~, Y, o' ^" {( v综上所述,从原理上说,对于最常见的黑白PDG,转换成PDF后应该长度略有减少,质量保持不变;对于带插图的多层PDG,转换成PDF后应该长度略有减少,质量保持不变;对于纯图像页面的PDG,转换后长度可能略有增加而质量不变,也可能长度、质量都有较大变化,但是这种页面毕竟不多。' _4 z3 v3 c/ e, w
+ @# j' J" H/ [& c) V7 ^现在各位明白我在本文开始部分给出的回答的含义了吧?1 K' v4 b: L$ V; U9 x
% |: v0 S* P3 W/ J8 T/ [! F
在明白的同时,我相信也会有人合理地引伸出另外一个问题:为什么现在大家看到从PDG转出来的PDF,会和原始PDG差那么多?9 h4 V/ ^4 f/ v3 v