2025-07-23 22:35:47 +08:00
|
|
|
import logging
|
|
|
|
from pathlib import Path
|
2023-12-25 10:49:25 +08:00
|
|
|
import common
|
2023-11-22 17:41:43 +08:00
|
|
|
import PIL, PIL.Image
|
|
|
|
|
|
|
|
# the config for thumbnail
|
2025-07-23 22:35:47 +08:00
|
|
|
THUMBNAIL_SIZE: int = 16
|
2023-11-22 17:41:43 +08:00
|
|
|
|
2025-07-23 22:35:47 +08:00
|
|
|
class ThumbnailBuilder():
|
2025-01-15 14:18:27 +08:00
|
|
|
|
|
|
|
def __init__(self):
|
2025-07-23 22:35:47 +08:00
|
|
|
pass
|
2025-01-15 14:18:27 +08:00
|
|
|
|
2025-07-23 22:35:47 +08:00
|
|
|
def build_thumbnails(self) -> None:
|
2025-01-15 14:18:27 +08:00
|
|
|
# get folder path
|
2025-07-23 22:35:47 +08:00
|
|
|
root_folder = common.get_plugin_folder()
|
2025-01-15 14:18:27 +08:00
|
|
|
|
|
|
|
# prepare handler
|
2025-07-23 22:35:47 +08:00
|
|
|
def folder_handler(rel_name: str, src_folder: Path, dst_folder: Path) -> None:
|
2025-01-15 14:18:27 +08:00
|
|
|
# just create folder
|
2025-07-23 22:35:47 +08:00
|
|
|
logging.info(f'Creating Folder: {src_folder} -> {dst_folder}')
|
|
|
|
dst_folder.mkdir(parents=False, exist_ok=True)
|
|
|
|
def file_handler(rel_name: str, src_file: Path, dst_file: Path) -> None:
|
2025-01-15 14:18:27 +08:00
|
|
|
# skip non-image
|
2025-07-23 22:35:47 +08:00
|
|
|
if src_file.suffix != '.png': return
|
2025-01-15 14:18:27 +08:00
|
|
|
# call thumbnail func
|
2025-07-23 22:35:47 +08:00
|
|
|
logging.info(f'Building Thumbnail: {src_file} -> {dst_file}')
|
2025-01-15 14:18:27 +08:00
|
|
|
self.__resize_image(src_file, dst_file)
|
|
|
|
|
|
|
|
# call common processor
|
|
|
|
common.common_file_migrator(
|
2025-07-23 22:35:47 +08:00
|
|
|
root_folder / 'raw_icons',
|
|
|
|
root_folder / 'icons',
|
2025-01-15 14:18:27 +08:00
|
|
|
folder_handler,
|
|
|
|
file_handler
|
|
|
|
)
|
|
|
|
|
2025-07-23 22:35:47 +08:00
|
|
|
logging.info('Building thumbnail done.')
|
2025-01-15 14:18:27 +08:00
|
|
|
|
2025-07-23 22:35:47 +08:00
|
|
|
def __resize_image(self, src_file: Path, dst_file: Path) -> None:
|
2025-01-15 14:18:27 +08:00
|
|
|
# open image
|
|
|
|
src_image: PIL.Image.Image = PIL.Image.open(src_file)
|
|
|
|
# create thumbnail
|
2025-07-23 22:35:47 +08:00
|
|
|
src_image.thumbnail((THUMBNAIL_SIZE, THUMBNAIL_SIZE))
|
2025-01-15 14:18:27 +08:00
|
|
|
# save to new file
|
|
|
|
src_image.save(dst_file)
|
2023-11-22 17:41:43 +08:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
2025-07-23 22:35:47 +08:00
|
|
|
common.setup_logging()
|
|
|
|
thumbnail_builder = ThumbnailBuilder()
|
|
|
|
thumbnail_builder.build_thumbnails()
|