diff --git a/backend/static/js/components/avatarCropperHandler.js b/backend/static/js/components/avatarCropperHandler.js
index c6f6838f..41bce431 100644
--- a/backend/static/js/components/avatarCropperHandler.js
+++ b/backend/static/js/components/avatarCropperHandler.js
@@ -21,7 +21,7 @@ const DEFAULT_CONFIG = {
// Настройки Cropper.js
cropperOptions: {
- aspectRatio: 1, // Квадратное фото
+ aspectRatio: 3 / 4, // Портретное фото 3:4
viewMode: 2, // Ограничить canvas областью контейнера
dragMode: 'move', // Перемещение изображения
autoCropArea: 0.8, // Начальный размер области обрезки (80%)
@@ -33,12 +33,13 @@ const DEFAULT_CONFIG = {
cropBoxResizable: true,
toggleDragModeOnDblclick: false,
minCropBoxWidth: 200,
- minCropBoxHeight: 200,
+ minCropBoxHeight: 266, // 200 * 4/3 для сохранения пропорций
},
// Требования для FaceID
- minOutputSize: 600, // Минимальный размер выходного изображения
- outputSize: 800, // Рекомендуемый размер выходного изображения
+ minOutputSize: 600, // Минимальный размер выходного изображения (по меньшей стороне)
+ outputWidth: 600, // Ширина выходного изображения (3:4)
+ outputHeight: 800, // Высота выходного изображения (3:4)
outputQuality: 0.92, // Качество JPEG (0.0 - 1.0)
outputFormat: 'image/jpeg', // Формат выходного файла
@@ -49,12 +50,13 @@ const DEFAULT_CONFIG = {
Требования для системы распознавания лиц:
- - Совместите голову и плечи с контуром
- - Лицо должно занимать 70-80% кадра
- - Расположите лицо в центре рамки
+ - Совместите тело с зелёным контуром (голова, плечи, торс)
+ - Лицо должно занимать верхнюю треть кадра
+ - Расположите лицо в центре по вертикальной линии
- Избегайте теней и бликов
- Смотрите прямо в камеру
- Нейтральное выражение лица
+ - Формат: портретное фото 3:4
`,
@@ -111,36 +113,41 @@ export class AvatarCropper {
![]()
-
-
@@ -321,6 +328,15 @@ export class AvatarCropper {
this.updateSizeIndicator(event.detail);
this.updateOverlayPosition();
},
+ cropstart: () => {
+ this.updateOverlayPosition();
+ },
+ cropmove: () => {
+ this.updateOverlayPosition();
+ },
+ cropend: () => {
+ this.updateOverlayPosition();
+ },
zoom: () => {
this.updateOverlayPosition();
}
@@ -409,10 +425,10 @@ export class AvatarCropper {
applyBtn.disabled = true;
applyBtn.innerHTML = 'Обработка...';
- // Получаем обрезанное изображение
+ // Получаем обрезанное изображение в пропорциях 3:4
const canvas = this.cropper.getCroppedCanvas({
- width: this.config.outputSize,
- height: this.config.outputSize,
+ width: this.config.outputWidth,
+ height: this.config.outputHeight,
imageSmoothingEnabled: true,
imageSmoothingQuality: 'high',
});
diff --git a/backend/templates/auth/register.html b/backend/templates/auth/register.html
index 42294bdf..7a8e4a82 100644
--- a/backend/templates/auth/register.html
+++ b/backend/templates/auth/register.html
@@ -118,8 +118,9 @@
Требования для системы распознавания лиц (FaceID):
- • Лицо должно занимать 70-80% кадра
- • Минимальный размер: 600x600px
+ • Портретное фото (пропорции 3:4)
+ • Совместите тело с контуром (голова, плечи, торс)
+ • Минимальный размер: 600x800px
• Форматы: JPG, PNG, GIF. Максимум 10 МБ
diff --git a/backend/templates/employees/components/employee_form_personal.html b/backend/templates/employees/components/employee_form_personal.html
index 67a4816a..c20e5a40 100644
--- a/backend/templates/employees/components/employee_form_personal.html
+++ b/backend/templates/employees/components/employee_form_personal.html
@@ -39,8 +39,9 @@
Требования для системы распознавания лиц (FaceID):
- • Лицо должно занимать 70-80% кадра
- • Минимальный размер: 600x600px
+ • Портретное фото (пропорции 3:4)
+ • Совместите тело с контуром (голова, плечи, торс)
+ • Минимальный размер: 600x800px
• Форматы: JPG, PNG, GIF. Максимум 10 МБ
{% if emp.avatar %}