Refactoring the department structure
This commit is contained in:
60
image/create_excel_with_images.md
Normal file
60
image/create_excel_with_images.md
Normal 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` для работы с изображениями.
|
||||
68
image/create_excel_with_images.py
Normal file
68
image/create_excel_with_images.py
Normal 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)
|
||||
65
image/crop_image_to_object_pixels.md
Normal file
65
image/crop_image_to_object_pixels.md
Normal 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.
|
||||
39
image/crop_image_to_object_pixels.py
Normal file
39
image/crop_image_to_object_pixels.py
Normal 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
58
image/split_image.md
Normal 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
47
image/split_image.py
Normal 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)
|
||||
Reference in New Issue
Block a user