小时候看漫画都是要买书的,一本好几块钱,成本那个高啊后来可以在线看漫画,感觉真是爽
不过近几年新的问题又出现了:漫画网站广告太多,更重要的是越来越多的作品、章节出于各种原因被下架、限制观看。为了提升观看体验,我通常会把漫画打包下载到本地。
01.素材准备
说起漫画的下载,途径可是非常的多,最直接的是使用一些漫画下载器去下载网站上的在线漫画;有兴致的朋友也可以自己写漫画爬虫,Github上也有很多类似的爬虫项目可以直接拿来用;实在不行就到一些专门的漫画下载网站打包下载。下图就是我最近下载的漫画图片。
关于漫画图片的获取不是本文的重点,这里想说的是,通过以上途径获取到的散图,放到电脑上看还行,但是如果要在手机上观看,大量图片的管理多少有些麻烦,图片从电脑端到手机端的传输也存在问题。所以就想到写一个python脚本,自动把大批量的图片按照章节(文件夹)分类合并为一个pdf文件,这样一来无论是传输还是观看都方便多了。
02.实战开始
此处的基本思路是先把每张图片转化成单张的pdf,然后把属于同一章节的pdf进行合并。图片转化为pdf使用的是reportlab库,多个pdf合并使用的则是PyPDF2库,这两个库都是可以直接使用pip来安装的,这里不再赘述。
1).图片转pdf
reportlab库中有个pdfgen.canvas包,能够新建指定大小的空白pdf,还能把图片绘制到这张pdf中。那么我们就可以使用PIL库读入一幅图片,获取图片的尺寸,然后建立相同大小的空白pdf文件,最后将这张图绘制到新建的pdf中。代码如下:
其中datapath是原图所在路径,ficFile是原图片文件,新生成的pdf文件还是存储在原图目录中,下图就是转化后的pdf效果:
2).pdf合并
pdf的合并需要用到PyPDF2包中的PdfFileMerger函数,来看下面这段代码:
其中,get_files是自定义函数,用来获取指定目录下的特定后缀的文件列表(这里我们获取所有的pdf文件);之后新建一个PdfFileMerger()对象,将获取到的所有单张pdf依次添加进来,实现多个pdf文件的合并,最后将合并后的pdf文件保存并输出到python脚本的同一目录。
3).文件管理
上面实现的只是一些基本的功能函数,要让程序顺利跑起来还需加入一些文件管理的代码。以我新下载的YQDQ这部漫画为例,这本漫画共13本,每一本的漫画图片都存储在自己的目录中,如图:
我们需要做的是,依次访问每一个文件夹,将其下的所有图片转化为pdf然后合并,生成的pdf文件以各文件夹名称进行命名,并存储到根目录中。其实这些逻辑有一部分在上面的代码中已经有所体现,我们来看主函数的代码:
关于get_files函数我们之前也提到过,这里一并放出函数代码和脚本引用的包,这样一来该脚本的所有代码就完整了,大家可以放心使用。
03.总结一下
运行脚本,最终好耗时24秒,生成了204M大小的13个pdf文件,如图:
目前wx搜索Python 【菜鸟学Python】排第二,汇聚了30万Python爱好者,累计原创近400篇趣味干货(爬虫,数据分析,算法,面试指南,原创趣味实战,Python游戏,机器学习),欢迎一起学Python,交流指正。