社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

火影,海贼王,七龙珠,还在为漫画书发愁!我用Python一键生成电子漫画书

菜鸟学Python • 4 年前 • 698 次点击  

小时候看漫画都是要买书的,一本好几块钱,成本那个高啊~后来可以在线看漫画,感觉真是爽~


不过近几年新的问题又出现了:漫画网站广告太多,更重要的是越来越多的作品、章节出于各种原因被下架、限制观看。为了提升观看体验,我通常会把漫画打包下载到本地。


1

素材准备


说起漫画的下载,途径可是非常的多,最直接的是使用一些漫画下载器去下载网站上的在线漫画;有兴致的朋友也可以自己写漫画爬虫,Github上也有很多类似的爬虫项目可以直接拿来用;实在不行就到一些专门的漫画下载网站打包下载。下图就是我最近下载的漫画图片。


关于漫画图片的获取不是本文的重点,这里想说的是,通过以上途径获取到的散图,放到电脑上看还行,但是如果要在手机上观看,大量图片的管理多少有些麻烦,图片从电脑端到手机端的传输也存在问题。
所以就想到写一个python脚本,自动把大批量的图片按照章节(文件夹)分类合并为一个pdf文件,这样一来无论是传输还是观看都方便多了。



2

实战开始


此处的基本思路是先把每张图片转化成单张的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函数我们之前也提到过,这里一并放出函数代码和脚本引用的包,这样一来该脚本的所有代码就完整了,大家可以放心使用。



3

总结一下


运行脚本,最终好耗时24秒,生成了204M大小的13个pdf文件,如图:

最后看一下视频,完整的看一下效果:



近期热门:

火爆全网!这个 Python 项目很骚气!

你必须掌握的20个python代码,短小精悍,用处无穷

Python 最强编辑器详细使用指南!



 点击阅读原文,阅读菜鸟学Python 400篇干货!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56017
 
698 次点击