¿Alinear y cambiar automáticamente el tamaño de 3 imágenes en una imagen pequeña con PHP?

StackOverflow https://stackoverflow.com/questions/1402867

  •  05-07-2019
  •  | 
  •  

Pregunta

No sé si esto es posible con PHP, pero pensé que si es así, alguien aquí sabrá cómo hacerlo. Actualmente estoy trabajando en un proyecto donde los usuarios pueden personalizar un avatar principal de cuerpo completo para usarlo en todo el sitio. Hay un montón de diferentes imágenes png transparentes de cara, cabello, etc. que se pueden seleccionar para hacer su avatar personalizado. Tengo este gran trabajo, pero aquí está la parte difícil. Quiero poder usar la cara, el cabello y la barba (si es hombre), y crear automáticamente una imagen de 80x80 que se usará como su pequeño avatar para publicaciones en el foro, etc.

Hay algunos obstáculos con esto. Primero, todas las imágenes son 187x404 (grandes cantidades de la imagen son transparentes, la imagen del cuerpo del personaje se logra apilando las imágenes, por lo que una imagen de la cara no es realmente tan grande). Para que esto funcione, las imágenes tendrían que ser recortadas de manera efectiva para que se eliminara todo el espacio extra y la parte real de la cara, el cabello o la barba se mostrara en el lugar de 80x80.

El segundo problema es que parte del cabello o la barba (cuando se coloca en la imagen de la cara de tamaño completo) se extendería más allá del 80x80 y se recortaría. Por lo tanto, la imagen tendría que ensamblarse a tamaño completo y luego cambiar su tamaño para ajustarse a 80x80.

Conozco la forma básica de combinar las 3 imágenes en una ( Combina 2-3 imágenes PNG transparentes una encima de la otra con PHP ), pero eso es todo lo que he conseguido. Si estoy loco y esto no es posible, entonces dímelo. Probablemente estoy complicando demasiado esto, así que si ves y obviamente una forma más fácil de lograr esto, me encantaría escucharlo.

¿Fue útil?

Solución

La forma más fácil es ajustar siempre la cara / cabello / barba en la misma área de la imagen. Luego simplemente recorte esa área.

Si es necesario, puede almacenar datos adicionales para cada imagen especificando un rectángulo en la imagen que debe debe estar visible en el pequeño avatar. Luego tome las extremidades máximas de estos rectángulos en todas las imágenes que componga, y recorte + reduzca a su pequeño tamaño de avatar.

Sin embargo, tenga en cuenta que cambiar el tamaño de las imágenes PNG en unos pocos píxeles (por ejemplo, 83x83 - > 80x80) puede reducir sustancialmente la calidad, en particular para imágenes con muchos bordes definidos. Esto se debe a que hay muchos píxeles en la nueva imagen que están [casi] divididos de manera uniforme entre los 4 píxeles de la imagen original, y en imágenes con bordes nítidos esto lleva a un desenfoque.

Entonces, reducir una imagen para que se ajuste a un retrato no solo es difícil sino que también reduce la calidad. ¡Me cortaría la barba en su lugar!

Otros consejos

Creo que primero debe decidir, recortar, cambiar el tamaño o una combinación de ambos (recortar a un cuadrado más grande y cambiar el tamaño).

De todos modos, si ya tiene las imágenes combinadas en una, las tres opciones son fáciles de hacer en PHP. Eche un vistazo a imagecopyresampled () .

Puede que esté simplificando demasiado esto, pero ¿puedes intentarlo?

  1. Lleve un registro de las dimensiones del tamaño máximo de la cara antes de la composición.

  2. Salida de la imagen compuesta a un archivo temporal.

  3. Recortar el cuadrado de los valores más grandes del paso 1

  4. Cambiar el tamaño de la porción de imagen recortada a 80 x 80

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top