连续翻页浏览器面临的共同问题

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

说明:此文以我在readfree上发的几个帖子为基础。这些帖子随着UnicornViewer的升级而陆续发布,基本上记录了UnicornViewer的一段升级历史。


目前发现连续翻页浏览器都面临几个同样的问题:

1、内存占用

与一次显示一页的浏览软件(如ComicsViewer)不同,连续翻页浏览器用于需要连续滚动,必须对前、后页进行缓存,否则翻页将不连贯。缓存如果管理不善,将可能导致内存占用持续增加。
Acrobat 8:怀疑有内存漏洞,浏览扫描版PDF时,随着翻页,内存占用会持续增加。不过Acrobat 8比Acrobat 7强一点:在我的512 MB内存机器上翻一本1000多页的扫描电子书,从头翻到尾,7居然把机器翻死了,8还勉强活着。
Foxit Reader 2.2:内存占用比较稳定。
WinDjView 5:在VC下运行debug版,会报告大量内存漏洞(我测试的时候,因为漏洞太多,以至于VC的错误报告自动截止了),不过这些漏洞基本上是从libdjvu带过来的 。
CajViewer 7:有一点轻微的内存漏洞(反复打开、关闭文档可以看出),不过翻页的时候内存占用比较稳定。
UnicornViewer:v0.10以前的版本在内存占用方面实在是臭名昭著,不过从v0.10开始脱胎换骨了,至少在浏览清晰版PDG的时候不会有什么内存漏洞。

2、同一文档在多个窗口中同时显示

有时候需要将一份文档前、后对照着看,这时最土的办法是启动两个浏览器,分别打开同一个文档,对照着看,好一点则是在同一个浏览器中,选择“窗口->新建窗口”,然后将两个窗口并排显示,以便比较。
Acrobat 8:支持,和Word 2003差不多。
Foxit Reader 2.2:支持,但是两个窗口只能上下排列,不能左右并列,看起来有点别扭。
WinDjView、CajViewer:不支持,所以我说他们的MDI界面只是披了一层皮,骨子里还是SDI。
UnicornViewer:早期版本就支持,不过一直不是很稳定。v0.10进行结构大调整后,运行很稳定,并且支持上下并列(平铺)、左右并列(纵铺)。

3、背景图案

我个人认为浏览器能够设置背景色已经足够了,但是国内某些用户可能被SSREADER惯坏了,非要能够设置背景图案才觉得爽。
这个功能要做过才知道有多难,总之Acrobat 8、Foxit Reader 2.2、WinDjView、CajViewer都不支持,UnicornViewer从v0.10开始支持,不过只能从内嵌的8个 背景图案中选。

4、图像缩放

在用连续翻页浏览器浏览的时候,很少有人会按图像的原始像素大小显示,多半都会选择某个缩放选项,因此图像缩放是浏览器必须面对的一个问题。
图像缩放里隐藏着一对永恒的矛盾:速度和效果,要想兼顾这二者是一件很难的事情。缩放速度直接影响到页面显示速度、翻页速度,而缩放效果则是缩放后人眼所看到的页面显示效果。
Acrobat 8:缩放速度、缩放效果比较均衡;以前版本的速度似乎有点问题,所以打开图版PDF时感觉有点痛苦。
Foxit Reader 2.2:早期版本有一个毛病:如果PDF页面是背景透明的黑白页面,则缩放后的显示效果会很差,不过后来的版本已经修正了这个错误。
WinDjView 5:缺省使用libdjvu的缩放功能,放大不错,缩小到一定程度后文字有点模糊,所以另外准备了一套高精度缩小算法。不过这个算法似乎速度有点问题(见WinDjView设置界面中的提示信息),所以缺省不开启,即使通过手工设置开启,也只有在缩小至50%以下时才会真正启用。
CAJViewer 7:缩小不错,放大不行。
UnicornViewer:以前贪图方便,用的是cximage的缩放代码,所以效果不错,速度不行。从v0.10开始,逐渐从ComicsViewer引入成熟代码,与cximage相结合。发展到v0.11,应该说速度和效果都比较均衡了。
其实图像缩放算法都是公开的:放大常用的有nearest、linear、cubic。其中nearest效果最差,但速度最快,所以UnicornViewer和PdgThumbViewer都用它来生成缩略图。cubic效果最好,但是运算量太大,没几个人愿用。linear在速度和效果上比较均衡,所以运用广泛。缩小常用的就是super-sampling。这些算法在Intel发行的Intel Image Processing Library Reference Manual附录B部分有详细解释,图文并茂、通俗易懂,有兴趣的不妨找来看看。
理论上说,如果采用相同的算法,各家软件的缩放效果应该是相同的。但为了加快速度,各家都采用独门秘技,在编码实现时对经典算法进行了力所能及的简化、转化(如浮点转定点等),最终导致各家在速度、效果方面产生了差异。

5、缩略图支持

缩略图这个东西,大多数时候没用,要用的时候还真不能没有。
但是天下从来没有白吃的午餐,显示缩略图也是要付出代价的:需要CPU来解码图像、生成缩略图,解码过程还可能与主界面的解码产生冲突;生成的缩略图需要在内存里保存。因此对时间和空间都有要求。
正因为如此,不少软件对缩略图都采取“能躲就躲”的政策,不过知难而上的也不是没有:
Acrobat 8:缺省情况下不显示缩略图,需要用户手工开启。而且缩略图只有在需要时才生成,不会在后台自动生成全部。
Foxit Reader 2.2:不支持缩略图,PDF带目录则显示目录,无目录则用页码代替目录。
Microsoft Office Document Imaging:缺省显示缩略图,而且生成缩略图的速度是我见过最快的,M$果然有人才啊!
WinDjView 5:缺省显示缩略图,而且缺省在后台悄悄生成所有页面的缩略图。经常看到有人抱怨打开大型DjVu的时候感觉像死机,其实多半是缩略图惹的祸,把那个缺省选项关掉就好多了。另外WinDjView不支持同一文档在多个窗口中同时显示,这 也与对缩略图的支持有关:这种支持限制了WinDjView的程序结构。
CAJViewer 7:不支持缩略图。
UnicornViewer:PDG缺省不显示缩略图,用目录代替;即使显示,缺省也是显示多少生成多少,不敢在后台全部生成。TIFF开始是向MODI学习,缺省显示缩略图;从v0.11开始,改为向Foxit Reader、CAJViewer学习,缺省用页码代替缩略图。

6、并排左翻

“并排左翻”的含义是:并排显示两页时,前页在右,后页在左,即按竖排书籍的排版方式显示。
Acrobat 8:可以通过在“首选项”的“国际”里设置“从右至左”来支持并排左翻。
Foxit Reader 2.2、WinDjView 5、CAJViewer 7均不支持此种显示方式。Foxit Reader、WinDjView情有可原,毕竟在西方书籍里没有这种翻页方式,但是CAJViewer这个“国产”软件也不支持,就有点不应该了,还是说知网的人都不看竖排书?
当年开发ComicsViewer时我就意识到这个功能的重要性(没办法,日本漫画都是这样翻的),但是由于种种原因,UnicornViewer直到v0.12才开始支持。可以预料,随着显示器尺寸越来越大,并排显示必将成为主流的阅读模式,而“并排左翻”对大陆用户来说可能只有读古籍才会用到,但对港台用户来说,却是日常必不可少的功能。

7、裁边

在连续显示时,页面上、下的页边空白如果很大,无疑会影响阅读;而对扫描书来说,由于种种原因导致页面边缘扫出黑边,看起来就更心烦。这些都可以通过“裁边”加以解决。
Acrobat 8支持裁边,但却是永久裁边,因此裁边后如果后悔了,不能恢复到原先的状态,所以我一直不敢用。Foxit Reader 2.2、WinDjView 5、CAJViewer 7均不支持此功能。
裁边是ComicsViewer的基本功能之一,UnicornViewer从v0.12开始引入,不过在ComicsViewer中是按照像素进行裁边,有时候会有点问题,所以在UnicornViewer中改成按百分比裁边。不论是ComicsViewer还是UnicornViewer,都只在显示的时候进行裁边,对原始图像文件不会有任何影响,因此可以放心使用。

posted @ 2015-10-27 10:11  strnghrs  阅读(1845)  评论(0编辑  收藏  举报