使用Python制作漫画和小说电子书的方法总结
电子书制作分为两类: 文字类书籍 和 漫画类书籍
今天就来介绍一下如何使用Python
制作这两种电子书籍.
文字类电子书制作
制作电子书可以使用
ebooklib
库,制作起来只需要简单的若干步骤就可以生成一本epub
电子书, 然后再通过kindlegen工具转换各种格式就可以了。
- Python库的安装方法
pip install ebooklib
制作电子书的主要步骤如下:
- 创建电子书
- 设置电子书的作者、书名等信息
- 为电子书添加简介
- 添加章节内容
- 为电子书制作目录
- 保存到文件
开始制作电子书
制作电子书代码示例如下:
from ebooklib import epub
book = epub.EpubBook()
book.set_identifier('sample123456')
book.set_title('Sample book')
book.set_language('en')
book.add_author('Aleksandar Erkalovic')
book.add_metadata('DC', 'description', 'This is description for my book')
book.add_metadata(None, 'meta', '', {'name': 'key', 'content': 'value'})
# intro chapter
c1 = epub.EpubHtml(title='Introduction',
file_name='intro.xhtml',
lang='en')
c1.set_content(u'<html><body><h1>Introduction</h1><p>Introduction paragraph.</p></body></html>')
# about chapter
c2 = epub.EpubHtml(title='About this book',
file_name='about.xhtml')
c2.set_content('<h1>About this book</h1><p>This is a book.</p>')
book.add_item(c1)
book.add_item(c2)
style = 'body { font-family: Times, Times New Roman, serif; }'
nav_css = epub.EpubItem(uid="style_nav",
file_name="style/nav.css",
media_type="text/css",
content=style)
book.add_item(nav_css)
# 目录TOC设置
book.toc = (epub.Link('intro.xhtml', 'Introduction', 'intro'),
(
epub.Section('Languages'),
(c1, c2)
)
)
# 书脊设置
book.spine = ['nav', c1, c2]
# 最后,需要添加NCX和导航信息
book.add_item(epub.EpubNcx())
book.add_item(epub.EpubNav())
# 电子书输出到文件
epub.write_epub('test.epub', book)
电子书的制作过程就是这样的流程了。
漫画电子书制作
- 使用Python库 KindleComicConverter
- 格式转会工具kindlegen
具体使用方法
- 安装
KindleComicConverter
库命令:pip install KindleComicConverter
- 安装后得到了一个命令
kcc-c2e
, 使用这个命令就可以将包含图片的目录制作成漫画电子书文件, 命令示例:kcc-c2e --forcecolor -p KPW -f MOBI -o ./鬼灭之刃第001话.epub./鬼灭之刃第001话/
- 安装
kindlegen
工具, 下载 kindlegen, 解压后将kindlegen
存放到/usr/local/bin
目录下即可。
kcc-c2e
命令介绍:
--forcecolor
: 表示生成漫画书保留色彩信息, 如果不增加就会将图片处理成灰度图片-p KPW
: 生成适配KPW设备的电子书, 可以在帮助信息中看到支持的设备列表-f MOBI
: 保存文件格式, 支持MOBI
、EPUB
、CBZ
、KFX
四种。-o outpath
: 生成文件名路径,如果是包含文件名,文件名后追要以".epub"结尾。
批量制作漫画书
准备工作完成,接下来开始制作电子书了。
现在根据自己的文件路径信息执行一下命令:
kcc-c2e --forcecolor -p KPW -f MOBI -o ./鬼灭之刃第001话.epub ./鬼灭之刃第001话/
此时,会先生成鬼灭之刃第001话.epub
文件,然后再转换成MOBI
格式的./鬼灭之刃第001话.mobi
文件(转换使用的是kindlegen
工具命令)。
下面是一个简单的按照目录批量生成漫画电子书的脚本:
#!/usr/bin/env bash
# kcc-c2e -b 2 -p KPW -o /data/Images/comics/out/鬼灭之刃 -f MOBI 鬼灭之刃
usage(){
cat <<END
使用说明:
`basename $0` <漫画名称目录>
用于批量生成多卷Volume文档
参数说明:
漫画目录名是包含子目录(卷)结构的
#
# 漫画名目录
# 卷1名
# 卷2名
# ...
# 卷n名
# 生成文件名为:
# 漫画名_卷1名.mobi
# 漫画名_卷2名.mobi
# ...
# 漫画名_卷n名.mobi
# 保存目录固定: /data/Images/comics/out
END
}
if [ "$#" == "0" -o "$1" = "-h" ] ; then
usage
exit 0
fi
fn_path="$1"
main_name=`basename $fn_path`
base_path=`dirname $fn_path`
echo "file_path: $fn_path"
echo "base_path: $base_path"
echo "file_name: $main_name"
outdir="/data/Images/comics/out/$main_name"
if [ "$base_path" = "." -o "$base_path" = "" ] ; then
base_path="/data/Images/comics"
fi
fn_path="$base_path/$main_name"
if [ ! -r "$fn_path" ] ; then
echo "$fn_path doesnt exist!"
exit 1
fi
if [ ! -r "$outdir" ] ; then
mkdir $outdir
if [ "$?" != "0" ] ; then
echo "输出目录创建失败:[$outdir]"
exit 1
fi
fi
cd $base_path/$main_name
for chapter_name in `ls`
do
out_name="$outdir/${main_name}_${chapter_name}.epub"
mobi_out_name="$outdir/${main_name}_${chapter_name}.mobi"
if [ ! -r "$mobi_out_name" ] ; then
kcc-c2e --forcecolor -p KPW -f MOBI -o $out_name $chapter_name
fi
done
rm -rf /tmp/mobi-*
rm -f /tmp/mbt-*
到这里基本上就已经介绍完制作方法了, 如果生成漫画书时出现一些图片读取错误那就表示图片破损或者读取的不是图片文件, 可以根据错误信息找到对应图片确认是否有错误并修正,然后单独使用kcc-c2e命令
生成就可以了。