support issue: #843

pull/865/head
Yijun Zhao 6 years ago
parent 8923e71220
commit 6c493df2f5

@ -24,6 +24,7 @@ import ub
from flask import current_app as app from flask import current_app as app
from tempfile import gettempdir from tempfile import gettempdir
import sys import sys
import io
import os import os
import re import re
import unicodedata import unicodedata
@ -34,6 +35,7 @@ from flask_babel import gettext as _
from flask_login import current_user from flask_login import current_user
from babel.dates import format_datetime from babel.dates import format_datetime
from datetime import datetime from datetime import datetime
from PIL import Image
import shutil import shutil
import requests import requests
try: try:
@ -445,10 +447,19 @@ def get_book_cover(cover_path):
# saves book cover to gdrive or locally # saves book cover to gdrive or locally
def save_cover(url, book_path): def save_cover(url, book_path):
img = requests.get(url) img = requests.get(url)
if img.headers.get('content-type') != 'image/jpeg': content_type = img.headers.get('content-type')
web.app.logger.error("Cover is no jpg file, can't save") 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 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: if ub.config.config_use_google_drive:
tmpDir = gettempdir() tmpDir = gettempdir()
f = open(os.path.join(tmpDir, "uploaded_cover.jpg"), "wb") f = open(os.path.join(tmpDir, "uploaded_cover.jpg"), "wb")

@ -13,3 +13,4 @@ SQLAlchemy>=1.1.0
tornado>=4.1 tornado>=4.1
Wand>=0.4.4 Wand>=0.4.4
unidecode>=0.04.19 unidecode>=0.04.19
Pillow>=5.4.0
Loading…
Cancel
Save