From 6c493df2f56c6f4ea77b771d74b3553f468af3cb Mon Sep 17 00:00:00 2001 From: Yijun Zhao Date: Tue, 26 Mar 2019 14:31:00 +0800 Subject: [PATCH] support issue: #843 --- cps/helper.py | 15 +++++++++++++-- requirements.txt | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index ea9e035c..6826c9c6 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -24,6 +24,7 @@ import ub from flask import current_app as app from tempfile import gettempdir import sys +import io import os import re import unicodedata @@ -34,6 +35,7 @@ from flask_babel import gettext as _ from flask_login import current_user from babel.dates import format_datetime from datetime import datetime +from PIL import Image import shutil import requests try: @@ -445,10 +447,19 @@ def get_book_cover(cover_path): # saves book cover to gdrive or locally def save_cover(url, book_path): img = requests.get(url) - if img.headers.get('content-type') != 'image/jpeg': - web.app.logger.error("Cover is no jpg file, can't save") + content_type = img.headers.get('content-type') + if content_type not in ('image/jpeg', 'image/png', 'image/webp'): + web.app.logger.error("Cover is only support jpg/png/webp file, can't save") return False + # convert to jpg because calibre just support jpg + if content_type in ('image/png', 'image/webp'): + imgc = Image.open(io.BytesIO(img.content)) + im = imgc.convert('RGB') + tmp_bytesio = io.BytesIO() + im.save(tmp_bytesio, format='JPEG') + img.content = tmp_bytesio.getvalue() + if ub.config.config_use_google_drive: tmpDir = gettempdir() f = open(os.path.join(tmpDir, "uploaded_cover.jpg"), "wb") diff --git a/requirements.txt b/requirements.txt index 3fb23ea3..84ffdd7c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,3 +13,4 @@ SQLAlchemy>=1.1.0 tornado>=4.1 Wand>=0.4.4 unidecode>=0.04.19 +Pillow>=5.4.0 \ No newline at end of file