import logging import os from django.conf import settings from PIL import Image, ImageOps gallery_path = settings.GALLERY["path"] gallery_thumb_path = settings.GALLERY["thumb_path"] logger = logging.getLogger(__name__) size = (320, 320) valid_images = [".jpg", ".png"] def get_image_list(folder_name): file_path = os.path.join(settings.MEDIA_ROOT + gallery_path, folder_name) img_list = [] if os.path.exists(file_path): for img in os.listdir(file_path): ext = os.path.splitext(img)[1] if ext.lower() not in valid_images: continue thumb_path = os.path.join(settings.MEDIA_ROOT + gallery_thumb_path, folder_name) thumb_file_path = os.path.join(thumb_path, f"thumb_{img}") if os.path.exists(thumb_file_path): thumb_url = os.path.join( settings.MEDIA_URL + gallery_thumb_path, folder_name + "/" + f"thumb_{img}", ) else: thumb_url = None img_dict = { "title": img, "image_url": os.path.join( settings.MEDIA_URL + gallery_path, folder_name + "/" + img, ), "thumb_url": thumb_url, } img_list.append(img_dict) return img_list def get_folder_list(): if os.path.exists(settings.MEDIA_ROOT + gallery_path): return next(os.walk(settings.MEDIA_ROOT + gallery_path))[1] return None def create_thumbs(folder_path): file_path = os.path.join(settings.MEDIA_ROOT + gallery_path, folder_path) thumb_path = os.path.join(settings.MEDIA_ROOT + gallery_thumb_path, folder_path) if os.path.exists(file_path): os.makedirs(thumb_path, exist_ok=True) for f in os.listdir(file_path): ext = os.path.splitext(f)[1] if ext.lower() not in valid_images: continue thumb_file_path = os.path.join(thumb_path, f"thumb_{f}") if os.path.exists(thumb_file_path): continue image_path = os.path.join(file_path, f) logger.info("Edit picture '%s'.", f) with Image.open(str(image_path), "r") as image: if image._getexif() is not None: image = ImageOps.exif_transpose(image) thumb = ImageOps.fit(image, size, Image.ANTIALIAS) thumb.save(thumb_file_path) logger.info("Save thumb 'thumb_%s'.", f)