Refactoring the department structure

This commit is contained in:
Egor Tsyganchuk
2024-12-02 19:38:23 +03:00
parent a02f275cb3
commit 6475ac3814
11 changed files with 318 additions and 48 deletions

View File

@@ -0,0 +1,60 @@
# Руководство по использованию скрипта для создания Excel с изображениями
Этот скрипт позволяет создать Excel файл, содержащий информацию об изображениях из указанной папки. Для каждого изображения будут записаны его имя, размер (в КБ) и добавлена миниатюра изображения.
## Зависимости
Перед использованием убедитесь, что у вас установлены следующие библиотеки:
- `openpyxl` — для работы с Excel файлами.
- `Pillow` (PIL) — для обработки изображений.
Установите их через pip:
```bash
pip install openpyxl Pillow
```
## Как использовать
### 1. Запуск скрипта
Скрипт используется через командную строку. Запустите его следующим образом:
```bash
python script.py <путь_к_папке> <путь_для_сохранения_файла>
```
Где:
- `<путь_к_папке>` — путь к папке с изображениями (например, `/home/user/images/`).
- `<путь_для_сохранения_файла>` — путь и имя для сохранения Excel файла (например, `output.xlsx`).
### 2. Что делает скрипт
- Скрипт проходит по всем файлам в указанной папке.
- Проверяет, является ли файл изображением (по расширениям `.png`, `.jpg`, `.jpeg`, `.gif`, `.bmp`).
- Для каждого изображения добавляется информация:
- Имя файла
- Размер в килобайтах
- Миниатюра изображения размером 100x100 пикселей
- Все данные записываются в Excel файл с тремя столбцами: **Filename**, **Size (KB)** и **Thumbnail**.
### 3. Пример использования
```bash
python script.py /home/user/images/ output.xlsx
```
После выполнения скрипта будет создан Excel файл `output.xlsx`, в котором будут перечислены изображения из папки `/home/user/images/`.
## Примечания
- Миниатюры изображений вставляются в Excel в отдельный столбец.
- Скрипт автоматически устанавливает высоту строк в зависимости от высоты изображения.
- Поддерживаются форматы изображений: PNG, JPG, JPEG, GIF, BMP.
- Все изображения сжимаются до размеров 100x100 пикселей.
## Источник
Скрипт написан на Python с использованием библиотек `openpyxl` для работы с Excel и `Pillow` для работы с изображениями.

View File

@@ -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)

View File

@@ -0,0 +1,65 @@
# Руководство по использованию скрипта для обрезки PNG изображений
Этот скрипт предназначен для обрезки PNG изображений в указанной папке, чтобы сохранить только видимый объект, удаляя пустое пространство вокруг. Обрезка выполняется с использованием информации о непрозрачных пикселях изображения.
## Требования
Перед запуском скрипта убедитесь, что установлены следующие библиотеки:
- **Pillow**: для обработки изображений.
Установите их с помощью команды:
```bash
pip install Pillow
```
## Как использовать
### Запуск скрипта
1. Скачайте или скопируйте скрипт на ваш компьютер.
2. В командной строке запустите скрипт, указав путь к папке с PNG изображениями:
```bash
python script.py <путь_к_входной_папке> [путь_к_выходной_папке]
```
- **<путь_к_входной_папке>** — путь к папке с PNG изображениями, которые необходимо обработать.
- **[путь_к_выходной_папке]** (необязательный параметр) — путь к папке, куда будут сохранены обработанные изображения. Если не указать, изображения сохранятся в той же папке, что и входные.
### Пример использования
```bash
python script.py /path/to/images /path/to/output
```
Если не указать выходную папку, изображения будут обработаны и сохранены в той же папке:
```bash
python script.py /path/to/images
```
### Что делает скрипт?
- Скрипт перебирает все PNG изображения в указанной входной папке.
- Для каждого изображения он находит границы видимых объектов (то есть непрозрачных пикселей).
- Затем изображение обрезается до этих границ и сохраняется в выходной папке.
### Пример вывода
При обработке каждого изображения в консоль выводится сообщение:
```
Processed image1.png
Processed image2.png
```
## Возможности
- Скрипт поддерживает работу с папками, содержащими несколько изображений.
- Если выходная папка не указана, скрипт создает её автоматически или использует входную папку для сохранения результатов.
## Примечание
Скрипт работает только с изображениями формата PNG.

View File

@@ -0,0 +1,39 @@
import os
import argparse
from PIL import Image
def crop_to_object(input_folder, output_folder=None):
# Если выходная папка не указана, используем входную
if output_folder is None:
output_folder = input_folder
# Проверяем, существует ли выходная папка, если нет, создаем ее
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# Проходим по всем файлам в входной папке
for filename in os.listdir(input_folder):
if filename.endswith('.png'):
img_path = os.path.join(input_folder, filename)
img = Image.open(img_path)
# Получаем границы непрозрачных пикселей
bbox = img.getbbox()
if bbox:
# Обрезаем изображение
img_cropped = img.crop(bbox)
# Сохраняем обработанное изображение
img_cropped.save(os.path.join(output_folder, filename))
print(f"Processed {filename}")
def main():
parser = argparse.ArgumentParser(description="Crop PNG images to the size of the visible object.")
parser.add_argument('input_folder', type=str, help='Path to the input folder containing PNG images.')
parser.add_argument('output_folder', type=str, nargs='?', default=None, help='Path to the output folder to save processed images. If not provided, the input folder will be used.')
args = parser.parse_args()
crop_to_object(args.input_folder, args.output_folder)
if __name__ == "__main__":
main()

58
image/split_image.md Normal file
View File

@@ -0,0 +1,58 @@
# Руководство по использованию скрипта для разрезания изображения на части
Этот скрипт позволяет разрезать изображение на части заданного размера и сохранить их в указанной папке. Скрипт использует библиотеку `PIL` из `Pillow` для обработки изображений и `argparse` для обработки аргументов командной строки.
## Описание работы скрипта
1. Скрипт открывает изображение по указанному пути.
2. Разбивает изображение на части заданного размера (ширина и высота).
3. Сохраняет полученные части как отдельные файлы PNG в указанной папке.
## Требования
- Установите библиотеку Pillow, если она ещё не установлена:
```
pip install pillow
```
## Использование
Для запуска скрипта используйте командную строку и укажите следующие параметры:
```bash
python script.py <image_path> <output_folder> <part_width> <part_height>
```
### Параметры
- `<image_path>`: Путь к изображению (формат PNG), которое вы хотите разрезать.
- `<output_folder>`: Папка, в которой будут сохранены части изображения.
- `<part_width>`: Ширина каждой части (в пикселях).
- `<part_height>`: Высота каждой части (в пикселях).
### Пример
```bash
python split_image.py image.png output_folder 100 100
```
Этот пример разрежет изображение `image.png` на части размером 100x100 пикселей и сохранит их в папку `output_folder`.
## Как работает скрипт
1. Скрипт открывает изображение, используя библиотеку `PIL`.
2. Затем вычисляется, сколько частей по ширине и высоте будет получено, исходя из размеров исходного изображения и указанных параметров.
3. Для каждой части вычисляются координаты обрезки, и изображение сохраняется в указанной папке с именем `part_X_Y.png`, где X и Y — это индексы части по горизонтали и вертикали.
4. Скрипт уведомит о завершении операции.
## Пример вывода
```
Изображение успешно разрезано на части размером 100x100 и сохранено в "output_folder".
```
## Заметки
- Скрипт автоматически создаст папку для сохранения частей, если она не существует.
- Последние части изображения могут быть немного меньше указанного размера, если изображение не делится на равные части по обеим осям.

47
image/split_image.py Normal file
View File

@@ -0,0 +1,47 @@
import os
import argparse
from PIL import Image
def split_image(image_path, output_folder, part_width, part_height):
# Открываем изображение
img = Image.open(image_path)
img_width, img_height = img.size
# Вычисляем количество частей по ширине и высоте
num_parts_x = img_width // part_width
num_parts_y = img_height // part_height
# Создаем выходную папку, если её нет
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for i in range(num_parts_x):
for j in range(num_parts_y):
# Вычисляем координаты для обрезки
left = i * part_width
upper = j * part_height
right = left + part_width if i < num_parts_x - 1 else img_width # Последняя часть берёт остаток
lower = upper + part_height if j < num_parts_y - 1 else img_height # Последняя часть берёт остаток
box = (left, upper, right, lower)
# Обрезаем изображение
part = img.crop(box)
# Сохраняем обрезанное изображение
part.save(os.path.join(output_folder, f'part_{i + 1}_{j + 1}.png'))
print(f'Изображение успешно разрезано на части размером {part_width}x{part_height} и сохранено в "{output_folder}".')
if __name__ == "__main__":
# Настраиваем парсер аргументов
parser = argparse.ArgumentParser(description='Разрезать изображение на части заданного размера.')
parser.add_argument('image_path', type=str, help='Путь к изображению PNG')
parser.add_argument('output_folder', type=str, help='Путь к папке для сохранения частей')
parser.add_argument('part_width', type=int, help='Ширина каждой части')
parser.add_argument('part_height', type=int, help='Высота каждой части')
# Парсим аргументы
args = parser.parse_args()
# Вызываем функцию разрезания изображения
split_image(args.image_path, args.output_folder, args.part_width, args.part_height)