69 lines
3.1 KiB
Python
69 lines
3.1 KiB
Python
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)
|