Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get page as image #291

Open
Impre-visible opened this issue Aug 13, 2023 · 3 comments
Open

Get page as image #291

Impre-visible opened this issue Aug 13, 2023 · 3 comments

Comments

@Impre-visible
Copy link

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")
@pbaletkeman
Copy link

@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

@Impre-visible
Copy link
Author

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

@aerkalov
Copy link
Owner

aerkalov commented Oct 1, 2023

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)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants