Files
scripts/image/create_excel_with_images.py
2024-12-02 19:38:23 +03:00

69 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)