在Python 3.4中将图像读入Ebooklib.Epub

时间:2015-10-30 09:59:14

标签: python

我想使用在Python 3.4中导入封面的ebooklib制作电子书。

在Python 2中,它可以正常工作:

im = open('image.jpg').read()  
book.set_cover(file_name=image.jpg',content=im,create_page=True)

在Python 3.4中失败了:

  

UnicodeDecodeError:'utf-8'编解码器无法解码位置的字节0xff   0:无效的起始字节。

显然通过open方法读取图像不再有效,但我无法在Python3中找到如何操作。

我尝试使用编解码器模块:

im = codecs.open("image.jpg",'r', 'encoding='utf-8')  
  

结果:TypeError:'str'不支持缓冲区接口

我尝试使用Pillow:

im=Image.open(path+'mn_epub.jpg').load()  
  

结果:TypeError:'PixelAccess'类型的对象没有len()

我也尝试过其他各种Pillow操作,但我找不到任何可以使它工作的东西。

2 个答案:

答案 0 :(得分:1)

该库似乎有一些unicode问题。 这是一个垫片,猴子修补图书馆,使问题消失;在脚本开头,导入库后,请包含以下代码:

from ebooklib import epub
original_get_template = epub.EpubBook.get_template
def new_get_template(*args, **kwargs):
    return original_get_template(*args, **kwargs).encode(encoding='utf8')
epub.EpubBook.get_template = new_get_template

答案 1 :(得分:0)

不打算废除旧帖子,但这是我发现的与我遇到的问题有关的唯一帖子,因此我想我会将它丢给所有偶然发现此帖子的人。

在处理图像和ebooklib库时,我还有很多问题。我偶然发现了this question regarding the charmap encoder with JPEG files,。 JPEG保存为二进制文件,因此需要将其读取,因此不必调用

im = open('image.jpg').read()

您需要致电

im = open('image.jpg', 'rb').read()

这可能在Python 2和3之间发生了变化。