2022-12-31 14:07:08 +01:00
|
|
|
# Copy from: https://github.com/silentsokolov/flask-thumbnails/blob/master/flask_thumbnails/utils.py
|
|
|
|
import importlib
|
|
|
|
import os
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
from typing import Union
|
|
|
|
|
|
|
|
|
|
|
|
def generate_filename(original_filename, *options):
|
|
|
|
name, ext = os.path.splitext(original_filename)
|
|
|
|
for v in options:
|
|
|
|
if v:
|
|
|
|
name += "_%s" % v
|
|
|
|
name += ext
|
|
|
|
|
|
|
|
return name
|
|
|
|
|
|
|
|
|
|
|
|
def parse_size(size):
|
|
|
|
if isinstance(size, int):
|
|
|
|
# If the size parameter is a single number, assume square aspect.
|
|
|
|
return [size, size]
|
|
|
|
|
|
|
|
if isinstance(size, (tuple, list)):
|
|
|
|
if len(size) == 1:
|
|
|
|
# If single value tuple/list is provided, exand it to two elements
|
|
|
|
return size + type(size)(size)
|
|
|
|
return size
|
|
|
|
|
|
|
|
try:
|
|
|
|
thumbnail_size = [int(x) for x in size.lower().split("x", 1)]
|
|
|
|
except ValueError:
|
|
|
|
raise ValueError( # pylint: disable=raise-missing-from
|
|
|
|
"Bad thumbnail size format. Valid format is INTxINT."
|
|
|
|
)
|
|
|
|
|
|
|
|
if len(thumbnail_size) == 1:
|
|
|
|
# If the size parameter only contains a single integer, assume square aspect.
|
|
|
|
thumbnail_size.append(thumbnail_size[0])
|
|
|
|
|
|
|
|
return thumbnail_size
|
|
|
|
|
|
|
|
|
|
|
|
def aspect_to_string(size):
|
|
|
|
if isinstance(size, str):
|
|
|
|
return size
|
|
|
|
|
|
|
|
return "x".join(map(str, size))
|
|
|
|
|
|
|
|
|
2023-01-07 01:52:11 +01:00
|
|
|
IMG_SUFFIX = {'.jpg', '.jpeg', '.png', '.JPG', '.JPEG', '.PNG'}
|
2022-12-31 14:07:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
def glob_img(p: Union[Path, str], recursive: bool = False):
|
|
|
|
p = Path(p)
|
|
|
|
if p.is_file() and p.suffix in IMG_SUFFIX:
|
|
|
|
yield p
|
|
|
|
else:
|
|
|
|
if recursive:
|
|
|
|
files = Path(p).glob("**/*.*")
|
|
|
|
else:
|
|
|
|
files = Path(p).glob("*.*")
|
|
|
|
|
|
|
|
for it in files:
|
|
|
|
if it.suffix not in IMG_SUFFIX:
|
|
|
|
continue
|
|
|
|
yield it
|