Product Craft Bible
Avatar Upload & Crop
Inicio Media y Archivos Avatar Upload & Crop
Media y Archivos

Avatar Upload & Crop

8 reglas setproduct.com "Avatar UI design" · avatarcropper.com (preview circular en vivo, escala 10-200%)setproduct.com "fallbacks like initials or generic silhouettes preserve the structure" · hey.georgie.nu "Avatar initials" (1 letra a 30px, hasta 3 a 48px+)Wassa "Handle image rotation on mobile" (8 valores EXIF, fix también server-side) · justmarkup.com "image-orientation"Uploadcare "Delete buttons provide control and flexibility" · setproduct.com "Action icons anchored to avatar"
94

Avatar Upload & Crop

8 reglas
807

Muestra el preview circular en vivo durante el recorte

Si el avatar se renderiza como circulo en el producto, el recortador debe mostrar un preview circular en vivo, nunca solo cuadrado. El usuario necesita ver exactamente que área quedara visible antes de confirmar: un marco cuadrado que luego produce un circulo recorta las orejas o la barbilla y obliga a iterar. El preview no reemplaza el marco de selección, convive con el: la selección mantiene aspecto 1:1 mientras el panel lateral muestra el circulo final a los tamaños reales de la UI.

setproduct.com "Avatar UI design" · avatarcropper.com (preview circular en vivo, escala 10-200%)
Preferir
Preview en vivo
64px
32px
Evitar
808

Permite mover y hacer zoom dentro del marco, no solo redimensionar la selección

El flujo de recorte debe permitir hacer zoom de la imagen dentro del marco, arrastrar (pan) para reposicionar al sujeto y, opcionalmente, rotar. Un recorte estático donde solo se mueve el borde de la selección obliga a recargar la foto si quedo mal encuadrada. La interacción canonica fija la selección (aspecto bloqueado 1:1) y mueve o escala la imagen dentro de ella, con un slider de zoom claro y un doble clic que resetea al encuadre original.

Cropper.js v2 cropperImage.$zoom(0.1) = +10% · cropit "drag to reposition and dynamically resize"
Preferir
Arrastra para reposicionar
Evitar
809

Bloquea el aspecto a 1:1; nunca dejes el recorte libre

El recortador de avatar debe forzar aspect ratio 1:1 (cuadrado, luego renderizado como circulo o cuadrado redondeado por CSS). Dar libertad de aspecto produce avatares rectangulares que rompen la cuadricula de listas, notificaciones y mensajes, y aparecen aplastados o estirados. La decisión de mostrar circular o cuadrado pertenece al sistema de diseño, no al usuario: la selección solo se mueve y escala, jamas se estira a un rectangulo.

Cropper.js v2 atributo aspectRatio="1" en <cropper-selection> · ux.redhat.com "do not change the shape of the avatar thumbnail"
Preferir
Evitar
810

Valida tipo y tamaño en el cliente antes de abrir el cropper

Antes de lanzar el recorte, valida en el cliente que el archivo sea una imagen aceptada (JPG, PNG, WebP) y que no supere el límite de peso. Si no pasa, muestra un mensaje concreto y no abras el cropper: abrirlo con un PDF o un archivo de 40 MB desperdicia el tiempo del usuario y puede congelar el navegador. El error debe nombrar el problema real, "El archivo pesa 8 MB, el máximo es 5 MB", nunca un genérico "Error al subir" que aparece recien al guardar.

Uploadcare "File uploader UX best practices" · max-local-file-size-bytes + mensaje explicito de límite
Preferir
retrato-8mb.png 8 MB · PNG
El archivo pesa 8 MB, el máximo es 5 MB. Elige otra imagen.
Recortar imagen
Evitar
Cropper abierto con documento.pdf
Error al subir (mostrado recien al pulsar Guardar)
811

Usa fallback de iniciales con color deterministico; nunca imagen rota

Cuando el usuario no tiene foto o la URL falla, muestra iniciales sobre un fondo de color derivado deterministicamente del identificador (nombre o ID), no aleatorio en cada render: el mismo usuario siempre con el mismo color para que sea reconocible. Nunca muestres el icono de imagen rota del navegador: intercepta el error con onerror y sustituye el <img> por el componente de iniciales. Avatares pequeños muestran 1 inicial; los de 48px o más, hasta 2 o 3.

setproduct.com "fallbacks like initials or generic silhouettes preserve the structure" · hey.georgie.nu "Avatar initials" (1 letra a 30px, hasta 3 a 48px+)
Preferir
JL
MR
AT
KW
color derivado del hash del user ID: Juan Lopez siempre violeta
Evitar
img con src rota: icono quebrado del navegador
812

Corrige la orientación EXIF antes del preview y antes de guardar

Las fotos tomadas en vertical con el telefono se almacenan en landscape con un tag EXIF de orientación. Los navegadores aplican image-orientation: from-image por CSS, pero el canvas de los croppers ignora ese dato y renderiza la imagen rotada -90 grados. Hay que leer el valor EXIF (1-8) al cargar, rotar el canvas en consecuencia antes de mostrar el cropper y asegurar que el servidor recibe la imagen ya corregida: una solución solo visual deja la foto de lado en la base de datos.

Wassa "Handle image rotation on mobile" (8 valores EXIF, fix también server-side) · justmarkup.com "image-orientation"
Preferir
EXIF leido
guardada erguida
Evitar
girada 90
813

Haz el cropper completamente operable por teclado

El recortador debe funcionar sin mouse: flechas para mover la imagen, + y - para zoom, Tab para recorrer los controles (slider de zoom, rotar, confirmar, cancelar) y Enter/Escape para confirmar o cancelar. Cada control custom necesita nombre accesible (aria-label) y estado expuesto (aria-valuenow en el slider). WCAG 2.1.1 exige que toda funcionalidad sea operable por teclado; los croppers móviles típicos no lo cumplen.

Cropper.js v2 atributo keyboard (flechas=1px, +=+10%, -=-10% zoom) · WCAG 2.1 SC 2.1.1 · uCrop issue #719 (evidencia anecdotica de un bug tracker, no auditoria formal)
Preferir
←↑→↓ mover 1px + zoom +10% - zoom -10% Esc cancelar
Evitar
Área de recorte solo responde a drag
Guardar (Tab salta aquí)
El usuario de teclado no puede reposicionar la imagen
814

Persiste el avatar y ofrece cambiar o quitar en cualquier momento

Una vez subido, el usuario debe poder reemplazar o eliminar el avatar sin fricción. El disparador de edición va visible sobre el avatar (icono de camara o lapiz con hover/focus), no enterrado en un menú de Configuración. Al eliminar, el sistema regresa al fallback de iniciales, no a una imagen rota ni a un hueco sin estructura. El flujo de cambio reutiliza exactamente el mismo cropper de la carga inicial: no implementes dos flujos separados.

Uploadcare "Delete buttons provide control and flexibility" · setproduct.com "Action icons anchored to avatar"
Preferir
Cambiar foto
Cambiar Eliminar foto
Evitar
Para cambiar la foto: Configuración › Perfil › Editar › Foto
Sin opción de eliminar