From 5d291bd1744b3decec998e6650505c6e871c34fe Mon Sep 17 00:00:00 2001 From: Egor Tsyganchuk Date: Fri, 29 Nov 2024 18:51:35 +0300 Subject: [PATCH] Added a script for creating an image map in Excel format. --- make_excel_file.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 make_excel_file.py diff --git a/make_excel_file.py b/make_excel_file.py new file mode 100644 index 0000000..2d6b3b5 --- /dev/null +++ b/make_excel_file.py @@ -0,0 +1,68 @@ +import os +import argparse +from openpyxl import Workbook +from openpyxl.drawing.image import Image +from PIL import Image as PILImage +from io import BytesIO + +def create_excel_with_images(folder_path, output_excel): + # Создаем новый workbook + wb = Workbook() + ws = wb.active + ws.title = "Images" + + # Заголовки столбцов + ws.append(["Filename", "Size (KB)", "Thumbnail"]) + + row_num = 2 # Начинаем с 2-й строки, т.к. первая - это заголовки + + # Получаем список всех файлов в указанной папке + for filename in os.listdir(folder_path): + file_path = os.path.join(folder_path, filename) + + # Проверяем, является ли файл изображением (по расширению) + if os.path.isfile(file_path) and filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')): + # Получаем размеры файла + file_size_kb = os.path.getsize(file_path) / 1024 + + # Получаем миниатюру изображения + img = PILImage.open(file_path) + img.thumbnail((100, 100)) # Сжимаем изображение до размера 100x100 пикселей + + # Сохраняем миниатюру в память + img_byte_arr = BytesIO() + img.save(img_byte_arr, format="PNG") + img_byte_arr.seek(0) + + # Вставляем данные в Excel + ws.append([filename, f"{file_size_kb:.2f}", ""]) # Добавляем название и размер + + # Добавляем миниатюру + image = Image(img_byte_arr) + image.anchor = f"C{row_num}" # Указываем, куда вставить картинку + + # Вставляем картинку + ws.add_image(image) + + # Устанавливаем высоту строки в зависимости от размера изображения + image_height = img.height # Высота изображения в пикселях + ws.row_dimensions[row_num].height = image_height * 0.75 # Преобразуем пиксели в высоту строки Excel (1 пиксель ≈ 0.75) + + row_num += 1 # Переходим к следующей строке + + # Сохраняем Excel файл + wb.save(output_excel) + print(f"Excel файл сохранен: {output_excel}") + +def parse_args(): + parser = argparse.ArgumentParser(description="Создание Excel файла с картинками.") + parser.add_argument("folder_path", help="Путь к папке с изображениями") + parser.add_argument("output_excel", help="Путь для сохранения Excel файла") + return parser.parse_args() + +if __name__ == "__main__": + # Получаем аргументы командной строки + args = parse_args() + + # Вызываем функцию создания Excel + create_excel_with_images(args.folder_path, args.output_excel)