作者:马健
邮箱:stronghorse_mj@hotmail.com发布:2009.09.26

更新历史

2014.11.11
补充了文字版PDG的部分内容
增加CX PDF等打包格式的相关内容

2009.09.26
首次公开发布

事先声明:
1、本文仅代表我自己的个人观点,没有必要争论:如果发现硬伤,欢迎指正;如果仅仅是有不同意见,请自己另写一篇去。
2、本文可以转载,但是必须注明转自读书园地,并注明原作者为strnghrs,并且不能对原文作任何删改,否则视为非法盗版。
3、本文写作过程中得到coolman的指正,在此表示感谢!

==========================================================================

新手初到园地,大概最心烦的就是与PDG相关的各种专有名词,包括图像版、文字版、清晰版、大图版、快速版、6xH等等,本文对此作一个简要说明,希望能起到扫盲的作用。

我个人认为,其实上面说的几个概念关系并不复杂,可以用下面的示意图(此图为strnghrs原创,版权所有,盗用必究)说明:
                      PDG文件
              ┏━━━━━━━━┻━━━━━━━━┳━━━━━━━━┓
            图像版PDG             文字版PDG           
CX
PDF
          (文件名无下划线)         (文件名带下划线)(一本书一个文件)
     ┏━━━━━━━━┻━━━━━━━┓         ┃        ┃
    清晰版      快速版     大图版    有人说好,有人不要  不同历史时期
     ┃        ┃       ┃    可能采用各种加密格式, 有不同的清晰度
  追求的目标     淘汰的目标   比快速版强  解密后是图文混排的PDF
 常为02H、04H   常为05H、AxH、6xH  非加密
解密后是CCITT、JPG  解密后是DjVu  JPG、PNG改名,原版ssreader不认PNG

当然对新手来说这个图理解起来有点困难,下面就加以详细解释。建议在看下文的时候,注意对照此图,以加深理解。

在早期PDG还处于“老子的队伍才开张”的时代,PDG文件都是用扫描后的图像文件产生的,骨子里还是一种图像格式,用官方浏览器ssreader打开后不能搜索、选择、复制文字,要想获得文字信息只能选择OCR。这样的PDG通常称为图像版PDG。

图像版PDG由于是从原书扫描成的,因此完全忠实于原书,包括版式、字体、插图等。但是图像文件毕竟太大,会给服务器、网络出口造成压力,而且不能直接搜索、复制文字也不便于使用,因此后来采用OCR引擎对扫描图像进行文字识别,再经ZIP压缩、按PDG文件格式加密封装等步骤后,出炉了一种骨子里是
纯文字或图文混排的PDF文件的PDG。这种PDG文件在ssreader里阅读时,能够直接搜索、选择、复制其中的文字,放大显示时文字也不会出现锯齿,因此被称为“文字版PDG”,以区别以前的图像版PDG。而在文件名上二者也有区别:图像版PDG文件名是6位,没有下划线;文字版PDG文件名长度不固定,中间有下划线。

到目前为止,没有任何一家OCR引擎敢保证自己的识别率是100%,事实上,我很怀疑未来有任何一家正常的软件公司敢下这样的保证。因此传统上认为文字版PDG不如图像版PDG靠得住,可能会因为OCR的差错而出现错别字,影响阅读、引用。这就是为什么在园地很多人求书时指明不要文字版PDG的原因。不过从我个人的实际经验看,早期
的纯文字版PDG确实存在一些问题,
后来推出的图文混排版则有所改进——OCR引擎把握比较大的文字就识别成文本,把握不大的就保持图片,所以差错不能说没有,但至少比纯文字的要好一点,只不过文本PDG在制作的时候忘记把图片设置成透明了,所以在浏览器里设置了背景后,阅读这种图文混排的PDG会感觉眼花缭乱——解决的办法就是自己把图像改成透明,或者用UnicornViewer阅读,并设置背景强制透明——当然免费版UnicornViewer是不支持文本PDG和PDF的。

另外我也曾碰到过个别文字版PDG是直接用从出版社获得的原始排版文件生成的,没有OCR环节,不仅没有什么错别字(原书有错的除外),而且完全体现原书版式,还是很值得收藏的。当然,这样的高质量文字版PDG只能靠运气,赶上了就有,赶不上也没办法。

总之,通常可以认为文字版PDG具有下列特征:

1、原始文字版PDG文件名必定带下划线,图像版PDG的文件名则没有下划线。
2、通常前言页会跑到最后去。我猜这是因为按照PDG命名规则,前言页以fow开头,所以在OCR的时候,自然排在以数字开头的正文页之后。由此可见PDG官方制作者的水平和态度。
3、把文本PDG解密、解压成PDF后,在Acrobat下打开,正文经常是黑体而不是宋体。修正这个问题的方法我在readfree说过,用PdfToy全文替换一下PDF中的字体参数就好。
4、阅读的时候要么感觉满眼错别字,要么感觉有些诡异,总觉得有些字看起来比较毛糙。如果设置了浏览器的背景,就会发现那些感觉毛糙的部分是白色背景的小图片。
5、原始文字版PDG文件的总长度很大,但转换、合并成一个PDF文件后,如果合并时用的是Acrobat等具有消除冗余对象能力的合并软件,合并后的PDF文件长度会比原始文字版PDG文件的总长度小很多。原因很简单:为了保证每个独立的文字版PDG文件都能被打开,CX被迫在制作时在每个文字版PDG所包含的PDF文件中都嵌入了字体,但其实对一本书来说,正文部分每一页使用的字体都是相同的,所以原始文字版PDG中包含大量的重复信息。用Acrobat合并时,会自动删除相同的字体,从而减少文件总长度。换句话说,如果文字版PDG合并成PDF后文件长度基本保持不变,你就应该怀疑你是不是用错了合并软件了。

文字版PDG虽然文件短小,但OCR毕竟是一个费时、费力的活儿,把所有书籍全变成文字版PDG显然不太现实。因此为了减轻服务器和网络的压力,在图像版PDG中又出现了清晰版、快速版的区别。换句话说,文字版PDG是不分什么清晰版、快速版的。

按照常规定义,采用300
DPI扫描得到的PDG称为“清晰版”,采用150
DPI扫描得到的称为“快速版”。由于DPI差了一倍,对于同一页书,清晰版的长、宽是快速版的2倍,文件长度当然也要大一些,但是文字、插图会更清晰。在园地区别清晰版与快速版的常规做法是:用ssreader打开,如果按100%显示就是快速版,按50%显示就是清晰版。这种鉴别方法武断了一点,不过在大多数情况下还算有效。而在ssreader内部是这样进行区分的:如果图像宽度超过1200像素,则认为图像是按300
DPI扫描的,否则认为是按150
DPI扫描的。这种区分显然忽略了16开版与32开版的差异。

快速版由于文件大小比清晰版小得多,其清晰度虽然比清晰版差,但通常情况下也不至于因此而造成太大的阅读障碍,因此在某段时期内在园地广为流行,甚至有人声称“宁要快速版,不要清晰版”。但是好景不长,在快速版的真面目被进一步揭开以后,很快就成了“过街老鼠”,如今在园地再无老鸟敢要快速版,以前收藏的快速版PDG也都成了鸡肋:为了追求较高的压缩比,快速版PDG全部采用有损DjVu压缩,而快速版本身的清晰度就不是太好,在DjVu有损压缩时,可能会将笔画残缺的相似字识别为同一个字,造成错别字。相比之下,清晰版全部采用无损CCITT
G4压缩,完全忠实于原著。有人曾在园地贴出过实际的PDG文件并进行对比:同一页的清晰版没有错别字,而快速版就出现错别字。

不论是清晰版还是快速版,对于文字页面都按照黑白二值图像进行存储,无法在其中加入灰度或彩色的水印。为了解决“疯狂的盗版问题”,在lr、dx等服务器上就出现了“大图版”这种图像PDG格式:将清晰版PDG缩图,加入水印,存为JPG或PNG格式,但是文件扩展名还是PDG,就是所谓的“大图版PDG”了。因此,所有大图版PDG都是带水印的,虽然水印图案可能不同。大图版有大、中、小三种尺寸,大尺寸的大图版与快速版的面积差不多,但更清晰,而且因为是从清晰版PDG转换过来,转换过程中采用的JPEG、PNG(其实是ZIP)压缩也不会产生错别字,因此在快速版遭到唾弃后,园地大多数人的求书要求是:能有清晰版就要清晰版,没有清晰版就要大图版。沦落到快速版、文字版的多半都有迫不得已的理由,如新手最常见的理由就是“穷”(求书指定清晰版需要更多的币币),有些人则是为了节省磁盘空间(快速版、文字版的文件长度通常比大图版、清晰版更小)。

新手初到园地,在没有见识过真正清晰版的情况下,容易把“看起来很清晰”的大图版当作“清晰版”,在求书区曾经有人为此打过笔墨官司。其实大图版如果没有被做过手脚,还是很容易区别的:
1、如上所说,所有大图版都带水印,而清晰版无水印。最常见的水印是篆刻有“好学近乎知”的印章,此外还有不常见的星星图案等,甚至有人帖出来过用近似于《午夜凶铃》剧照的MM彩照做水印的大图版PDG。当然,这些水印基本上都可以通过图像处理淡化甚至去除。
2、大图版通常是供IE在线浏览,IE支持JPG、PNG,但是官方原版ssreader
4.0只支持JPG,不支持PNG。因此纯文字页面的大图版PDG文件,用原版ssreader
4.0通常是打不开的,只能用园地发布的修改版ssreader,或第三方浏览器如UnicornViewer、ComicsViewer才能打开。鉴别图像格式的另一个方法是用免费的Pdg2Pic打开疑似大图版文件所在文件夹,这个软件会自动检查PDG文件的数据压缩算法。在文件没有被人做过手脚的情况下,如果左下方文件信息显示“PNG”则是大图版,显示“DjVu”是快速版,显示“CCITT”是清晰版,显示“JPG”则不确定。不过随着园地众多格式转换软件的发行,也会有人重新对文件进行处理,造成上述方法的误判。
3、大尺寸的大图版和快速版的画面尺寸差不多大,但是比清晰版还是小得多,而且文字看起来发“晕”(从清晰版到大图版缩图时造成的柔化),没有清晰版锐利。不过这个要有比较才会鉴别。
4、清晰版如果有彩色插图,转为大图版后多半会变成灰度图像,这个也要有比较才能鉴别。因此如果求的是带彩色插图的书,我都会指明只要清晰版,当然求书代价也会相应提高。

由于求书人对清晰版的不懈追求,而且清晰版的出价通常比快速版、大图版更高,因此也出现了一些“伪高清”:把大图版或快速版,甚至是文字版转为图像,然后放大到清晰版的尺寸,再经过某些图像处理,用老鹰或coolman提供的PDG压缩软件,采用CCITT算法压成00H或02H
PDG,貌似清晰版的“伪高清”就出炉了。这种伪高清虽然不能把灰度插图再变回彩色,但是看上去没有水印,用原版ssreader能够正常打开,用Pdg2Pic检查时“格式”栏显示的也是CCITT,而尺寸也是清晰版的尺寸,因此对于新手来说很难鉴别,在求书应助时也曾有人为此打过笔墨官司。我个人的看法:伪高清的制作过程注定是有损的,因此制作再精良的伪高清,与真正的清晰版也不能完全等同。不过如果伪高清是从大图版制作出来的,而且原书页面上没有插图,处理后的视觉效果也足以“乱真”,碰到这样的“高仿”也算运气。而如果是从快速版或文字版制作出来的,不论制作技术如何高超,都属于绝对不能原谅的JS行为,因为如前所述,快速版、文字版PDG本身就是不可信的。

至于经常有人提到的00H、02H、6xH等数字,指的都是PDG文件的加密格式代号:早期V1版PDG文件加密比较弱,很快就被人破解,然后D版盘卖得到处都是。为了对付D版,PDG文件定义了全新的V2版格式,所采用的加密技术也不断在更新换代。从大版本看,V2版PDG经历了0xH(包括00H、01H、02H、03H、04H、05H)、1xH(包括11H、12H、13H、14H、15H、16H、17H、18H、19H、1AH、1BH、1CH、1EH)、28H、AxH(包括AAH、ABH、ACH)、6xH(包括64H、65H、66H、67H、68H)几个时代。如果想了解每一版PDG详细的加密算法,可以阅读cheming先生的大作《吵醒文件加密方式说明v1.5》。

需要说明的是,对加密格式的判断要结合PDG文件的版本信息才能判断准确。早期曾经有人在园地发行过一些不成熟的格式检查软件,忽略了PDG版本,机械地按照文件头第16字节处的信息判断加密算法。结果经常有人用这样的软件检查后就惊呼“又有新的PDG加密格式了”,徒增笑柄。现在流行的PdgThumbViewer、Pdg2Pic,及老鹰、coolman的格式检查软件,均避免了这样的错误。

目前6xH可以说代表了PDG文件加密技术的最高成就,成为官方打击D版PDG的利器,因此也受到了最为广泛的关注。但实际上,在PDG文件服务器上是不会有6xH格式存在的:高版本的官方原版ssreader会组合登录用户名、本地硬件信息(通称机器码)等生成加密密钥,在下载的时候,会用加密密钥对下载到的PDG文件进行加密,在本地生成6xH文件。因此,用一台机器下载到的6xH文件,换一台机器就不能读了——两台机器的机器码不一样。解决的办法包括:
1、用cheming的Pizza、老鹰的coffee、coolman的魔术师解密。
2、不用官方原版ssreader下载。如前所述,6xH是原版ssreader下载后在本地生成的。可供选择的软件包括修改版ssreader(去掉6xH加密环节)、BE等。
3、用官方原版ssreader阅读或下载,但是对网络数据流进行截流,获得加密前的原始PDG。

除了上面说的机器码限制外,PDG中还可能有时间限制:如果用官方原版ssreader阅读本地保存的带时间限制的PDG文件,在超过规定期限后,ssreader就会自动对文件进行破坏。而在文件到期前把它解密掉,也常常成为在园地购买Pizza、coffee、魔术师等解密软件,或刻苦努力翻旧贴,研究报文、嗅探、截流等技术的理由。

带时间限制的PDG虽说有点定时炸弹的感觉,好歹在有效期内还能在本地阅读,而某些镜像服务器上的AxH则只允许在线浏览,不允许下载阅读:用官方原版ssreader下载AxH到本地后,会立刻对文件进行不可恢复的破坏,破坏后的文件用格式检查软件检查通常显示为FFH格式,因此在园地FFH也是“死亡”的代名词。解决的办法就是别用原版ssreader下载,改用截流、第三方下载软件或修改版ssreader。不过到现在为止,我见过的AxH全部都是快速版,看过就删了。

对于没有做过手脚的图像版PDG,PDG的加密格式与图像清晰度密切相关:早期清晰版通常是02H、04H,而快速版是05H,因此早期在园地也用加密格式代号来辨别清晰版与快速版,02H因此成为追捧的对象。不过自从老鹰、coolman发布PDG加密软件后,可以任意更改PDG的加密代号,这招就常常失灵了。

所有格式里比较特殊的是00H,即不加密的格式。这种格式当然也不会有时间、机器码限制。除早期的服务器外,目前新的PDG服务器上已经很难找到这种格式。但不论是清晰版还是快速版,经Pizza、coffee、魔术师解密后都成为00H。图像版00H可以用原版ssreader正常阅读,而且由于在阅读的时候不再需要花时间进行解密,因此显示速度可能比未解密的快那么一点点。不过如果文字版PDG被解密成了00H,用原版ssreader就不能阅读了,因为它认为这世上本不该有未加密的文字版PDG。目前00H的文字版PDG只能用园地提供的高版本UnicornViewer,或老鹰、coolman提供的ssreader增强插件才能阅读。

但是无论如何,现在用官方原版ssreader从sslib下载到的6xH,多半都是快速版(据说很久以前有过清晰版,现在也不排除漏网之鱼的可能)——为了减轻服务器压力,新版官方ssreader在下载sslib时,会自动选择从存放快速版的服务器上下载,这就是为什么经常有人问“用ssreader在线浏览很清晰,下载后再看就不清晰”的原因。而用官方ssreader从主站下载,则可能得到6xH的清晰版,并且这种6xH不受有效期限制(机器码限制还是有的)——听起来不错,可惜主站的书实在少了点。至于解决的办法,前面已经说过了。

所以园地新手的迫切愿望,最优先的当然是能够看到不受限制的00H的清晰版,退而求其次就是大图版,实在不行也要摆脱6xH的时间、机器码限制,从此过上安宁、快乐的幸福生活。

而随着手持阅读设备的兴盛,大家都开始感觉到以散页方式存放的PDG文件在手持设备上阅读时的不便,CX公司也顺应潮流推出了打包电子书格式,即一本书打包成一个文件,方便在手持设备上存储、阅读。

到目前为止,CX公司正式公开推出了两种打包格式,一种是私有的PDZ格式,一种是公开的PDF格式。PDZ格式的详细说明请参见cheming等发表的相关文章,我从来没有接触过这种格式,所以不便评价,只知道用coolman发布的“深海宝贝”软件可以实现PDZ、PDG格式之间的相互转换。

CX推出的PDF在园地一般称为CX
PDF,以区别于一般常见的扫描版PDF——因为这种特殊的PDF实在是制作得太烂了,不仅文件臃肿不堪,而且文字可能缺笔少划,详见我在园地相关帖子中所举的例子。

其实早期的CX
PDF都是从清晰版PDG直接转出来的,而且转换所用的软件库还是花美金买的国外软件库,只不过很不幸的是CX公司的程序员不知道应该如何正确使用这套软件库,所以转换出来的PDF才会有种种问题。但其实CX
PDF只是制作过程本身出了问题,图像本身是没错的,所以PdfToy专门针对CX PDF进行了优化,可以把CX
PDF中的图像无损导出,因此早期用原始清晰版PDG制作的CX PDF仍然能转回清晰版PDG,而后期用清晰版PDG缩水制作的CX
PDF,转完了也是缩水的PDG。

换句话说,早期CX
PDF都是用真正的清晰版PDG转换出来的,因此虽然直接阅读的时候有点问题,但转回PDG后没有问题。后来可能是为了压缩文件长度以缓解带宽压力和存储压力,CX开始用缩水的清晰版制作CX
PDF:把清晰版PDG的长、宽压缩到50%,然后再转换成PDF。这种缩水版的CX
PDF转回来的PDG也是缩水的:实际DPI只有150,和以前的快速版相同,但因为没有采用蛋疼的DjVu压缩,所以清晰度比快速版要好,甚至比大图版都好,而且没有水印,所以一度被人用来当作清晰版PDG应助,在园地引发了热热闹闹的口水官司,我也在无意中被卷入,被迫紧急发布了DpiCalc(DPI计算器),可以按照书籍开本、图像像素尺寸反算DPI,或按照书籍开本、DPI计算扫描像素尺寸,让喜欢计较DPI的人可以算到爽。在Pdg2Pic、UnicornViewer等软件中,在报告PDG的DPI值时,也开始按照CX算法、32开算法、16开算法分别报告。

总之,CX
PDF不管是原始的还是缩水的,清晰度都比快速版、大图版更好,又没有文字版的OCR错误,所以在找不到清晰版PDF的情况下,也是一个不错的选择,而在补附属页的时候,基本上是目前最佳的选择。

而在PDZ、CX
PDF之前,CX公司还悄悄推出过一种打包格式,只不过一般人不知道。引用coolman的原话:超星还有一种内部是html压缩包的pdg文件,类似chm这种文件,一般是一本书就一个文件,文件名没有任何特别之处。大多数应该是超星会员制作后,超星加工的。此类格式的文件目前可以用魔术师(注:现在是“深海宝贝”)查看,并导出内部包含的图像和htm文件。

我貌似在SSREADER里见过这种html文件打包的功能,不过太久没有用SSREADER,不是很清楚了。

PDG科普篇的更多相关文章

  1. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  2. Nodejs的运行原理-科普篇

    前言 Nodejs目前处境稍显尴尬,很多语言都已经拥有异步非阻塞的能力.阿里的思路是比较合适的,但是必须要注意,绝对不能让node做太多的业务逻辑,他只适合接收生成好的数据,然后或渲染后,或直接发送到 ...

  3. Andriod Studio科普篇——4.关于编译的常见问题

    1.android支持库未安装 编译不过,提示如下: Could not find any version that matches com.android.support:appcompat-v7: ...

  4. Andriod Studio科普篇——3.关于gradle插件的常见问题

    1.andriod gradle插件版本过低. 出错位置: dependencies{ classpath 'com.android.tools.build:gradle:0.10.2' } 提示信息 ...

  5. Android Studio科普篇——2.误区

    1.删除一行是ctrl+x? 这是一个被谣传得很广泛的快捷键,但其实删除一行的快捷键不是ctrl+x,而是ctrl+y.ctrl+x在不选中内容的情况下,是剪切当前行,而ctrl+y才是删除当前行,它 ...

  6. Android Studio科普篇——1.几个个性化设置

    本人未研读过android-studio使用文档,亦未去好好琢磨它的各种使用技巧等.以下内容均来自个人使用经验,如有讹误,还请指正. 1.主题. File->Settings, 搜索Theme, ...

  7. MongoDB入门系列之科普篇

    ​ 目录 背景 对比 MongoDB的数据存储格式 背景 最近公司扩展了很多国外客户,那么一个很严重的问题就是翻译,对于国外客户来说,肯定看不懂中文,那就要项目中提供切换各自国家语言的功能. 由于每个 ...

  8. ssm科普篇

    springMVC执行步骤: 1.用户发送请求到前端控制器,前端控制器根据请求信息来决定选择页面控制器,并将请求委托给它 2.页面控制器收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象, ...

  9. Nodejs的运行原理-架构篇

    前言 本来是想只做一个Nodejs运行原理-科普篇,但是收到了不少私信,要我多分享一些更进阶,更详细的内容,所以我会在接下来的两个月里继续更新Nodejs运行原理. PS:此系列只做Nodejs的运行 ...

随机推荐

  1. vim修行

    查用的vim 操作 1.移动光标的方法 h 戒 向左箭央键(←) 光标向左移劢一个字符 j 戒 向下箭央键(↓) 光标向下移劢一个字符 k 戒 向上箭央键(↑) 光标向上移劢一个字符 l 戒 向右箭央 ...

  2. Angular5学习笔记 - 集成Bootstrap、Jquery、Tether(三)

    一.添加配置 cnpm i bootstrap jquery tether --save 添加后效果 二.配置添加样式和js的引用 打开.angular-cli.json文件,在styles和scri ...

  3. Oracle之into

    ), NVL() INTO SALE_ID, STORE_ID FROM SALEFROMSTORE WHERE ORDERID = IN_ORDER_ID; 这里要注意,into的时候是一个sele ...

  4. java代码异常,水位异常的捕获

    总: 异常的产生!!!!异常如何实现,继承~~~ package com.b; //我不懂为什么这里的异常一定要来自于父类.子类.去继承它.因为Exception是Throwable类的子类异常类.而 ...

  5. L2-020. 功夫传人(dfs+vector 或者 邻接矩阵+dij+优先队列)

    L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...

  6. [Chapter 3 Process]Practice 3.2 Including the initial parent process, how many processes are created by the program shown in Figure?

    3.2 Including the initial parent process, how many processes are created by the program shown in Fig ...

  7. Rename Oracle Managed File (OMF) datafiles in ASM(ZT)

    Recently I was asked to rename a tablespace. The environment was Oracle version 11.2.0.3 (both datab ...

  8. java.lang.Class.getDeclaredMethod()方法详解

    Java.lang.Class.getDeclaredMethod()方法用法 注:方法返回一个Method对象,它反映此Class对象所表示的类或接口的指定已声明方法. 描述 java.lang.C ...

  9. hibernateTemplate方法使用

  10. JVM实用参数(一)JVM类型以及编译器模式

    JVM实用参数(一)JVM类型以及编译器模式 原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-1-jvm-types ...