diff --git a/file.py b/file.py index e188499..868c3d6 100644 --- a/file.py +++ b/file.py @@ -1,5 +1,6 @@ -import shutil, os, configparser, zipfile +import shutil, os, configparser, zipfile, io import db +from PIL import Image config = configparser.ConfigParser() config.read("./conf/app.ini") @@ -20,7 +21,9 @@ def auotLoadFile(): if zipfile.is_zipfile( config.get("file", "inputdir") + "/" + item ): # 判断是否为压缩包 - with zipfile.ZipFile(config.get("file", "inputdir") + "/" + item, "r") as zip_ref: + with zipfile.ZipFile( + config.get("file", "inputdir") + "/" + item, "r" + ) as zip_ref: db.newFile(item, len(zip_ref.namelist())) # 添加数据库记录 移动到存储 shutil.move( config.get("file", "inputdir") + "/" + item, @@ -47,7 +50,7 @@ def raedZip(bookid: str, index: int): if not image_files: return "not imgfile in zip", "" - + if int(index) > len(image_files): return "404 not found", "" @@ -62,3 +65,25 @@ def raedZip(bookid: str, index: int): return "Bad ZipFile", "" except Exception as e: return str(e), "" + + +def thumbnail(input,size=(400,800)): + im = Image.open(io.BytesIO(input)) + del input + im = im.convert('RGB') + im.thumbnail(size) + output_io = io.BytesIO() + im.save(output_io,format='WEBP') + output_io.seek(0) + return output_io + +def imageToWebP(input): + im = Image.open(io.BytesIO(input)) + del input + im = im.convert('RGB') + output_io = io.BytesIO() + im.save(output_io,format='WEBP') + output_io.seek(0) + return output_io + + diff --git a/main.py b/main.py index 6919ebd..ef72ba0 100644 --- a/main.py +++ b/main.py @@ -65,13 +65,18 @@ def img(bookid, index): # 图片接口 if request.cookies.get("islogin") is None: return abort(403) if db.searchByid(bookid) == "": - return jsonify({'message': 'No ZIP file part'}), 400 + return abort(404) # 设置响应类型为图片 data, filename = file.raedZip(bookid,index) + if request.args.get("mini") == "yes": + data = file.thumbnail(data) + else: + data = file.imageToWebP(data) if isinstance(data, str): abort(404) response = make_response(data) #读取文件 - response.headers.set('Content-Type', 'image/{}'.format(filename.split('.')[-1])) + del data + response.headers.set('Content-Type', 'image/Webp') response.headers.set('Content-Disposition', 'inline', filename=filename) return response diff --git a/requirements.txt b/requirements.txt index 223e3c4..1f8ad7c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ shortuuid -flask \ No newline at end of file +flask +Pillow \ No newline at end of file diff --git a/templates/overview.html b/templates/overview.html index ed19fa7..638b69a 100644 --- a/templates/overview.html +++ b/templates/overview.html @@ -45,10 +45,6 @@ cursor: pointer; } - .loading { - display: none; - } - #imageContainer { display: none; justify-content: center; @@ -73,18 +69,18 @@
-