PDG科普篇
作者:马健
邮箱: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科普篇的更多相关文章
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- Nodejs的运行原理-科普篇
前言 Nodejs目前处境稍显尴尬,很多语言都已经拥有异步非阻塞的能力.阿里的思路是比较合适的,但是必须要注意,绝对不能让node做太多的业务逻辑,他只适合接收生成好的数据,然后或渲染后,或直接发送到 ...
- Andriod Studio科普篇——4.关于编译的常见问题
1.android支持库未安装 编译不过,提示如下: Could not find any version that matches com.android.support:appcompat-v7: ...
- Andriod Studio科普篇——3.关于gradle插件的常见问题
1.andriod gradle插件版本过低. 出错位置: dependencies{ classpath 'com.android.tools.build:gradle:0.10.2' } 提示信息 ...
- Android Studio科普篇——2.误区
1.删除一行是ctrl+x? 这是一个被谣传得很广泛的快捷键,但其实删除一行的快捷键不是ctrl+x,而是ctrl+y.ctrl+x在不选中内容的情况下,是剪切当前行,而ctrl+y才是删除当前行,它 ...
- Android Studio科普篇——1.几个个性化设置
本人未研读过android-studio使用文档,亦未去好好琢磨它的各种使用技巧等.以下内容均来自个人使用经验,如有讹误,还请指正. 1.主题. File->Settings, 搜索Theme, ...
- MongoDB入门系列之科普篇
目录 背景 对比 MongoDB的数据存储格式 背景 最近公司扩展了很多国外客户,那么一个很严重的问题就是翻译,对于国外客户来说,肯定看不懂中文,那就要项目中提供切换各自国家语言的功能. 由于每个 ...
- ssm科普篇
springMVC执行步骤: 1.用户发送请求到前端控制器,前端控制器根据请求信息来决定选择页面控制器,并将请求委托给它 2.页面控制器收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象, ...
- Nodejs的运行原理-架构篇
前言 本来是想只做一个Nodejs运行原理-科普篇,但是收到了不少私信,要我多分享一些更进阶,更详细的内容,所以我会在接下来的两个月里继续更新Nodejs运行原理. PS:此系列只做Nodejs的运行 ...
随机推荐
- HttpContext是干什么的
这是MSDN对HttpContext的说明: HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息. (网上说是上下文信息,啥又叫上下文呢?个人感觉说的不 ...
- 序章:为什么学习使用kotlin、及kotlin的一些碎碎念
为什么使用kotlin? 当然是因为项目目前的开发语言是kotlin啊! 一方面是想能够尽快适应项目,另一方面,kotlin这门语言独特的语法,确实很吸引我,也让我意识到java代码在某些程度上的繁琐 ...
- bae3.0第二步 添加一个空的django项目
1.创建django项目: 进入bae应用源码目录(appidd01iud80bg)执行django-admin.py startproject blog2.修改index.py的内容如下所示 #-* ...
- 基于 WebSocket 的 MQTT 移动推送方案
WebSphere MQ Telemetry Transport 简介 WebSphere MQ Telemetry Transport (MQTT) 是一项异步消息传输协议,是 IBM 在分析了他们 ...
- IPv4 forwarding is disabled. Networking will not work.
centos 7 docker 启动了一个web服务 但是启动时 报 WARNING: IPv4 forwarding is disabled. Networking will not work. 网 ...
- hihoCoder1304:24点
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 周末,小Hi和小Ho都在家待着. 在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间. 小Ho:玩 ...
- UVA548(二叉树遍历)
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
- Java 8新增的日期、时间格式器
一 获取DateTimeFormatter对象的三种方式 直接使用静态常量创建DateTimeFormatter格式器 使用代码不同风格的枚举值来创建DateTimeFormatter格式器 根据模式 ...
- python selenium 滚动条处理、页面拖动
selenium中没有直接控制滚动条的方法,可以使用方法:execute_script(),可以直接执行js的脚本. 一.竖向滚动条控制,三种方法总有一款适合你. 1.滚动条拉到最底: js=&quo ...
- DataGridView风格设置
http://blog.csdn.net/wangzhen209/article/details/51744518 http://www.cnblogs.com/hanpanpan