Book Walker(角川旗下电子书服务,下称BW)日前关闭了原有的杂志放题服务“マガジン WALKER”(下称MW),新开了“マンガ・雑誌 読み放題”服务,直接归属于BW下。
价格方面,从原来的550日元/月涨价到760日元/月(前几个月优惠价,外加有促销送一些BW的积分等),但是增加了漫画放题。对我来说漫画放题基本没有用,不过涨价2美元左右也算可以接受。
其实,我一直有在订阅日本亚马逊的放题服务,那个比较贵,大概980日元/月。优点在于Kindle的破解很成熟,所以杂志都可以下载提取备份。但是亚马逊从大概大半年前开始,放题都不再是0点更新,而是要等到日本时间快中午才更新,就很不爽,于是多定了个MW当备份。而且,MW也有一些亚马逊不包含的杂志,比如《電撃萌王》、连载ML BC的《電撃マオウ》(都是角川系)等等,也不算亏。(顺便吐个槽,作为动画情报志御三家之一的NewType,角川一直故意不出电子版,很猥琐。Animage和Animedia都有电子版而且都是放题对象。)
在今天4月1日放题活动正式启动后,我就购买了看了下。和老的MW对比,首先,新版有日本IP才能点开放题的书/杂志(和BW买电子书其实一样),MW只有登录需要日本IP,有cookie后随便看。进入阅读器后,倒是都不需要日本代理。
基本而言我看的杂志都还有,但是唯独少了看的最多之一的《声優グランプリ》。其实之前预告期间,我就发现下面的名字里没列出声G,以为只是省略了,没想到真的没有。之前《声優アニメディア》被母公司学研プラス卖给イード后,我有担心会不会影响放题阅读;结果那边没问题,反而是声G没谈妥。
这里插播一段。声G的电子版的画质一直都很差,图片压缩率很高,满脸的JPEG artifacts,而且还经常有锐化过度、缩图出锯齿的问题。相比之下,声A的可以说是超高清了。另外,我最近还发现,声G的MW版和Kindle版的颜色是不太一样的。MW版的对比度偏低,而且稍微有点色偏:
很难说哪个更好,但是至少声G的官推的sample图都是和Kindle版颜色一致,姑且认为那个应该是正确的版本吧。另外Kindle是1920px高,MW/BW是2048px,区别不大。
提取
当然,比起Kindle,MW或者说BW系的破解一直是个大难题,尤其是客户端的破解异常复杂。虽然网上有零星关于破解的消息,但是角川经常升级,所以少数掌握破解方式的人一般都不外传。(写这文的时候去看了下,发现BW居然已经直接停止支持客户端了,PC只能用web看现在。我之前装的客户端倒是还能用。)
与之相对,网页版的破解就容易许多。虽然BW/MW的js依然是加密的而且又臭又长,所以破解也很难(远超出我的能力),但是不难找到部分函数比如渲染canvas的函数,然后强行hook把解码后的图片保存。这样虽然无法做到无二次压缩保存原始图片(其实也不可能,因为网页版服务器提供的就是混淆后的文件压成JPEG),但是至少1:1比例的图源可以拿到。具体方法这里不赘述,可以参考Jixun大的日志。(要自动保存的话,Chrome需要加参数--disable-web-security --user-data-dir=XXX来破掉tainted canvas的问题(第二个参数不能省略,否则第一个参数无效)。)
之前BW用的js是viewer_image_2.0.10_2019-09-18.js,而MW用的是更老的viewer_image_v0.1.10_2018-11-15.js。两者功能基本没区别,但是渲染canvas的函数一个是window.NFBR.a6G.a5x.prototype['b9b'],一个是['B0F']。现在,两者(BW本体的web阅读器网址是的viewer.bookwalker.jp,放题的是viewer-subscription.bookwalker.jp)统一成了viewer_loader_2.0.15_2020-03-05.js,但是函数位置没变还是['b9b']。
新版放题某些杂志图片的白边问题
在更新之后,我打开一本声A,首先注意到的是图片渲染好像有点小问题——有白边。
这里要先说一下BW的viewer是怎么渲染的。其渲染函数有5个arguments,分别是:
targetCanvas, page, image, drawRect, flag
第一个就是目标<canvas>元素,第二个是关于page的一些参数(见下图):

第三个是image的参数(其实基本就只有width和height),drawRect是你要draw的大小(取决于屏幕和zoom比例),flag是说是左页还是右页。
在正常观看的时候,由于屏幕显然没有2000+px那么高,所以实际的drawRect是一个很小的数,比如几百px。但是如果你要下载原图的话,就可以把原始的size填进来(保证canvas的高宽一致)再保存,就可以把原始大小的图片渲染进canvas然后保存了。
但是需要注意的是,page 的size(width, height)和image的size一般是不同的:BW和MW里,两者的高度基本都是2048px,但是宽度不同。以我买过的某一期My Girl为例,page size是1586px宽,image size则是1592px宽。到底哪个才是“原始大小”?
你可能会想,那我们肯定要取image size,这样才是原图嘛。其实不然:根据我的观察,page size才是图像的原始大小,而image size之所以会大一些,可能是因为混淆加密的需求,而在原始图像上加了白边凑到mod 8导致。事实上,可以分别下载两者比较,结果就显而易见。在用page size作为你的drawRect以及canvas大小后,下下来的图直接就是没有左右白边的(对于跨页图用了page size后,你下载的图能和网页viewer一样,能直接完美拼上中缝)。
但是在新版放题的viewer-subscription.bookwalker.jp里,就不是这样了:以这本声A为例,我发现page size变成了1851×2339,而image size变成了1856×2344。
而且,在viewer里都有肉眼可见的白边了,跨页图根本没法完美地拼在一起:

那么问题来了:现在我们应该渲染成page size还是image size下载呢?之前两者的高度是相同的,选择page size仅仅是等于自动切了白边,不影响有效内容;但是现在连高度都不同,会怎样渲染呢?
经过测试,可以得知:还是应该选择page size。如果使用image size导出,会得出一个看似大了一点、但是仔细看会发现图片变糊(这个在有字体的地方比较明显,看照片部分一般看不太出来)——所以其实是用原图放大搞出来的。所以,只有用page size,才能正确输出1:1比例的原图。
其实回过头去看上面我贴的那个page参数,其实已经可以看到这两者的差值(宽高各5px)正是那page对象info里的DummyWidth和DummyHeight。上面举例的2048px的书,则是DummyWidth: 6,DummyHeight: 0。所以答案很明显了。唯一的不同之处就是2048px的那个书即使用image size下载也不会拉伸,只是加白边而已,这里会罢了(因为渲染函数会保证宽高比不变)。
至于切割白边,由于这里1856*2339/2344~=1852,和比page size的1851只错了1,基本等于没有自带切白边,而上面说到的四周多的白边其实是原图的一部分了(否则在viewer里的渲染效果也不会中间有白边),所以只能自己下载后手动切除。
手动切除白边后,尺寸变成1835×2317,看似比之前的1621×2048要大,但是仔细对比后感觉字体还是稍微糊了些,可能还是upscale的。不过,我也发现其颜色比旧版要好(比如红色没有明显劣化),所以有可能使用了比较高的quality或者没有用sub-sampling(4:2:0或者4:2:2)。
这里对比三种:

如果要问我的话,我还是觉得2048px才是没有放大过的尺寸。其他都是从比较小的尺寸放大过的(倒不是说“原始尺寸”就是2048px,因为出版社提供给BW的应该是更大的分辨率。只是BW放题这个感觉是用先缩了一次的图又拉伸了一次的感觉。)
不过,并不是所有杂志都有这个问题,比如萌王就没有。可能只是BW内部转换出了错误,比如默认所有图都是一个高宽比,不够高的加白边之类的。
目测BW放题无论是服务本身还是技术上还会有各种微调(虽然对日本程序员不抱什么希望),我们拭目以待。








