火影,海賊王,七龍珠,還在爲漫畫書發愁!我用Python一鍵生成電子漫畫書

小時候看漫畫都是要買書的,一本好幾塊錢,成本那個高啊後來可以在線看漫畫,感覺真是爽

不過近幾年新的問題又出現了:漫畫網站廣告太多,更重要的是越來越多的作品、章節出於各種原因被下架、限制觀看。爲了提升觀看體驗,我通常會把漫畫打包下載到本地。

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,交流指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章