Рассортировка (или, как её часто называют в офисах, «рассорка») сотрудников по имени и фото — неотъемлемая часть внутреннего документооборота: от бейджей до внутренних каталогов, от списков доступа до «карт» новых сотрудников. Ниже — подробный гайд, как автоматизировать и упростить этот процесс, не потеряв ни одного имени и ни одной фотографии.
Подготовка исходных данных
Сбор фото
- Требования к фото: формат JPG/PNG, размер 1:1 (квадрат), разрешение не менее 400×400 px, фон однотонный (желательно белый).
- Именование файлов: Строго по маске Ivanov_Ivan.jpg (Фамилия_Имя.расширение). Это позволит избежать путаницы при автоматической обработке.
- Контроль качества: убедитесь, что лица хорошо видны, нет теней и «красных глаз»; Для массовой обработки используйте пакетные редакторы (Adobe Lightroom, XnConvert).
Сбор имен
- Экспортируйте список сотрудников из корпоративной HR-системы (1С, SAP, Oracle HCM и т.д.).
- Приведите ФИО к единому формату: Фамилия Имя Отчество. Удалите лишние пробелы, двойные дефисы и специальные символы.
- Сверьте список с фото: каждому файлу должен соответствовать один человек и наоборот. Для сверки удобно использовать Excel/Google Sheets: колонка A, фамилия_имя, колонка B — статус «фото есть/нет».
Выбор инструмента для рассортировки
| Инструмент | Формат вывода | Сильные стороны | Минусы |
|---|---|---|---|
| Excel/Google Sheets | Таблица + вставка фото | Быстро, без кода, шаблоны печати | Ручная вставка фото при больших объёмах |
| PowerPoint | Слайд на человека | Наглядно, можно добавить QR-код | Сложно автоматизировать >500 человек |
| Python + Pillow/OpenCV | PDF/PNG/JPG | Полная автоматизация, миллионы записей | Нужны базовые навыки программирования |
| Фото-каталоги SaaS (Mugshot, Thalamus, etc.) | Веб-галерея, печатные листы | Готовые шаблоны, без кода | Подписка, ограничения по персональным данным |
Пошаговые инструкции для каждого подхода
Excel/Google Sheets (без кода)
Шаг 1. Создайте таблицу:
| № | Фамилия Имя | Отдел | Фото (вставка) | |---|-------------|-------|----------------| | 1 | Иванов Иван | IT | [файл] | | 2 | Петрова Анна| HR | [файл] |
Шаг 2. Вставьте фото через Вставка → Изображение → В ячейку.
Шаг 3. Отсортируйте данные по нужному критерию: Данные → Сортировка → по столбцу «Отдел» или «Фамилия».
Шаг 4. Повторите вставку фото для всех строк (при больших объёмах используйте надстройку Photo Loader for Sheets из Google Workspace Marketplace).
PowerPoint (каталог «по слайдам»)
- Создайте макет слайда: фото (квадрат 150×150 мм), ФИО крупным шрифтом, должность мелким.
- Используйте функцию Вставка → Альбом изображений, выберите папку с фото.
- Добавьте текстовые поля с помощью Почтовая рассылка → Этикетки для автозаполнения ФИО из Excel.
- Отсортируйте слайды вручную или через макрос
SortSlidesByName.
Python-скрипт для полной автоматизации
Что делает скрипт:
- Читает CSV со списком людей и путь к фото.
- Генерирует PDF-файл «Каталог сотрудников» по алфавиту.
- Добавляет QR-код с email-адресом.
Минимальный код:
import pandas as pd
from PIL import Image, ImageDraw, ImageFont
import qrcode
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
df = pd.read_csv('employees.csv') # колонки: name, photo_path, email
df = df.sort_values('name')
c = canvas.Canvas("employee_catalog.pdf", pagesize=A4)
w, h = A4
y_pos = h ⸺ 50
for _, row in df.iterrows:
img = Image.open(row['photo_path']).resize((100, 100))
c.drawImage(row['photo_path'], 50, y_pos-100, width=100, height=100)
c.drawString(160, y_pos-30, row['name'])
# добавляем QR
qr = qrcode.make(row['email'])
qr.save('tmp_qr.png')
c.drawImage('tmp_qr.png', 400, y_pos-100, width=100, height=100)
y_pos -= 120
c.save
Запуск:
pip install pandas pillow qrcode reportlab python make_catalog.py
Советы по защите персональных данных
- Шифрование: храните исходные фото в зашифрованной папке или облаке с двухфакторной авторизацией.
- Маскирование: при публикации во внешнем каталоге можно скрыть фамилии или размыть фон (примените batch-скрипт ImageMagick:
convert .jpg -background white -flatten -blur 0x2 output/%03d.jpg). - Удаление метаданных: перед загрузкой удалите GPS-координаты из EXIF (
exiftool -gps:all= .jpg). - Ограничение доступа: каталоги в формате PDF можно защитить паролем через
pdftk.
Автоматическая ежемесячная рассорка
Чтобы каталог всегда был актуален:
- Настройте экспорт из HR-системы по расписанию (cron-задача, раз в 2 недели).
- Сделайте Git-репозиторий с фото, где каждый файл именуется по маске. Принудительный Pull Request = проверка качества фото.
- CI/CD (GitHub Actions) запускает Python-скрипт → генерирует актуальный PDF → выкладывает в защищённый S3-бакет.
- Менеджеры получают ссылку «скачать актуальный каталог» без участия IT.
Чек-лист перед публикацией
- ☐ Все ли фото соответствуют 1:1 и ≥400×400 px?
- ☐ Имена отсортированы по алфавиту или отделам?
- ☐ QR-коды/email при необходимости проверены?
- ☐ Проверены права на использование фотографий (согласие подписано)?
- ☐ Файл защищён паролем или размещён в корпоративном облаке?
- ☐ Сделан тестовый печатный образец на принтере: читаемость мелкого шрифта и чёткость фото?
Краткий FAQ
Что делать, если фото пришли в разных пропорциях?
Используйте команду ImageMagick для центрированного кропа: magick mogrify -resize 400x400^ -gravity center -crop 400x400+0+0 *.jpg.
Как заменить фото у одного сотрудника без перегенерации всего каталога?
Замените файл по тому же пути и имени, запустите скрипт с флагом --single=name.
Можно ли делать каталог в виде интерактивной веб-страницы?
Да, используйте готовые шаблоны на Bubble.io или Retool и подключите Google Sheets как источник данных.