ebooklib icon indicating copy to clipboard operation
ebooklib copied to clipboard

Get page as image

Open Impre-visible opened this issue 2 years ago • 4 comments

Hi, I want to read an epub, and get all the pages as images. Is that possible ? I tried that, but don't work :

book = epub.read_epub(book_slug)
item = book.get_items()[int(page)]
content = item.get_content()
image_stream = io.BytesIO(content)
image_stream.seek(0)
return send_file(image_stream, mimetype="image/jpeg")

Impre-visible avatar Aug 13 '23 07:08 Impre-visible

@Impre-visible you may require an external library such as Pillow (https://pillow.readthedocs.io/en/latest/handbook/index.html). I have used Pillow with ebooklib to extract all the images (including SVG) from the epub and save the files. Here are some examples which may help out https://stackoverflow.com/questions/68648801/generate-image-from-given-text

pbaletkeman avatar Sep 26 '23 12:09 pbaletkeman

I found a way to do that, I send it here in a few hours so you can see how I did

Impre-visible avatar Sep 26 '23 13:09 Impre-visible

Wait, do you want to get HTML content of a pages as image or all images inside of the EPUB file?

If it is former it would probably be the best to unzip EPUB file to temp directory and use some of the HTML2IMAGE 3rd party libraries to create an image. Extracting to temp directory so the 3rd party tool has access to images and css files.

If it is latter then you do something like (very simple version which does not include some image post processing):

from ebooklib.utils import guess_type

for image in  book.get_items_of_type(ebooklib.ITEM_IMAGE):
     content_of_image = image.get_content()
     mt, en = guess_type(image.get_name())
     if mt:
         send_file(content_of_image, mimetype=mt)

aerkalov avatar Oct 01 '23 20:10 aerkalov