404-novel-project / novel-downloader

一个可扩展的通用型小说下载器。
GNU Affero General Public License v3.0
961 stars 88 forks source link

[Bug]: epub在掌阅的兼容性 #451

Open MotooriKashin opened 1 year ago

MotooriKashin commented 1 year ago

必要条件

当我尝试复现issue时……

问题描述

当保存为epub时,如果封面等图片格式为jpeg掌阅无法识别。

问题发生的网址:

https://www.linovelib.com/novel/2121/catalog

复现步骤

  1. 下载并保存为epub
  2. 使用掌阅Android打开

期待的行为

保存的epub资源时机包含了封面等图片,但掌阅无法识别。经测试将所有jpeg文件修改拓展名为jpg后正常。
这虽然是掌阅的问题,但其作为国内知名的epub阅读软件,受到困恼的用户想必不是唯一。jpegjpg实际是同一中图片格式,但短拓展名显然兼容性更佳。希望能在打包epub时判定一下图片拓展名,修正为兼容性更好的格式。

ps: 上述网址的图片在网页直接查看就是jpg格式,不太明白为什么脚本要重命名为jpeg,难道有其他需求?

实际的行为

脚本本身没问题,只是一个兼容性请求。

小说下载器脚本版本

5.0.815

脚本管理器(Tampermonkey/Violentmonkey)版本

4.19.6180

浏览器名称及版本

Google Chrome 111.0.5563.65 (正式版本) (64 位) (cohort: Stable)

MotooriKashin commented 1 year ago

经测试,不是图片后缀名问题,而是脚本生成的epub本身有问题。如下图:

脚本打包的epub(右)和bandizip打包的epub(左) image

脚本打包的epub无法正常显示封面
使用bandizip(Windows)解压并重新打包为zip并修改后缀为epub后正常识别
使用ZArchiver(Android)解压并重新打包为zip并修改后缀为epub后正常识别

——所以是不是脚本使用的zip库有问题?

MotooriKashin commented 1 year ago

补充:在上面的网站下载了个76M的“欢迎来到实力至上主义的教室”测试,打开文件时直接把掌阅卡崩溃了,但是使用bandizip(Windows)ZArchiver(Android)重新打包的文件却能做到秒开。

似乎进一步说明了生成的epub文件有问题。

yingziwu commented 1 year ago

有一点奇怪。

novel-downloader 脚本使用的ZIP库是 fflate

fflate 以前的一些生成ZIP格式不规范的BUG [1][2],在新版中应该都解决了。

刚刚实际下载测试了一下,下载生成的ZIP文件也确实没有问题。

样本:[河野裕]阶梯岛系列-epub.zip

日志:

$ 7z t "[河野裕]阶梯岛系列.epub" 

7-Zip [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.04 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs x64)

Scanning the drive for archives:
1 file, 1648753 bytes (1611 KiB)

Testing archive: [河野裕]阶梯岛系列.epub
--
Path = [河野裕]阶梯岛系列.epub
Type = zip
Physical Size = 1648753

Everything is Ok

Files: 71
Size:       2959434
Compressed: 1648753   
$ zip -T "[河野裕]阶梯岛系列.epub"                       
test of [河野裕]阶梯岛系列.epub OK        
MotooriKashin commented 1 year ago

测试应该是没问题的,毕竟能使用其他压缩工具打开。但是你提供的样本还是在掌阅无法识别封面等图片。

byx2020 commented 9 months ago

2024年02月05日,同样遇到了此问题,不知道楼主有没有找到解决办法?