backend: convert input images to webp

This commit is contained in:
OleSTEEP 2025-10-02 23:09:00 +03:00
parent d786d7f7af
commit 4921d4bd6f
5 changed files with 32 additions and 7 deletions

4
.gitignore vendored
View file

@ -3,5 +3,5 @@ venv/
__pycache__/ __pycache__/
.idea/ .idea/
.DS_Store .DS_Store
vn_database.db *.db
screens/ store/

View file

@ -4,6 +4,7 @@ from fastapi.middleware.cors import CORSMiddleware
from pathlib import Path from pathlib import Path
from vntypes import Novel, Mark from vntypes import Novel, Mark
from utils import *
from db import VNDB from db import VNDB
app = FastAPI() app = FastAPI()
@ -42,7 +43,4 @@ async def novel_thumb(thumb: Annotated[bytes, File()], filename: str):
@app.post("/api/screenshot") @app.post("/api/screenshot")
async def screenshot(scrshot: Annotated[bytes, File()], filename: str): async def screenshot(scrshot: Annotated[bytes, File()], filename: str):
Path("screens/").mkdir(exist_ok=True) return {"file_size": save_image(scrshot, "screens", filename)}
with open(Path("screens", filename), "wb") as file:
file.write(scrshot)
return {"file_size": len(scrshot)}

View file

@ -1,8 +1,10 @@
import sqlite3 import sqlite3
from utils import asset
class VNDB: class VNDB:
def __init__(self, db_name='vn_database.db'): def __init__(self, db_name=asset('vn_database.db')):
self.__db_name = db_name self.__db_name = db_name
connection = sqlite3.connect(self.__db_name) connection = sqlite3.connect(self.__db_name)
cursor = connection.cursor() cursor = connection.cursor()

25
backend/utils.py Normal file
View file

@ -0,0 +1,25 @@
from PIL import Image, UnidentifiedImageError
from pathlib import Path
import io
def asset(path: str) -> Path:
return Path("store", path)
def image_normalize(img: bytes) -> bytes:
try:
byte_arr = io.BytesIO()
img = Image.open(io.BytesIO(img))
img.save(byte_arr, format='WEBP')
return byte_arr.getvalue()
except UnidentifiedImageError:
return 0
def save_image(img: bytes, dir: str, name: str) -> int:
path = asset(dir)
path.mkdir(exist_ok=True)
img = image_normalize(img)
if img:
with open(Path(path, name+'.webp'), "wb") as file:
file.write(img)
return len(img)