Pregunta

Estoy luchando por encontrar el enfoque correcto para cambiar el tamaño, el cultivo y la imagen, con un área de enfoque. En mi caso, el área de enfoque es una cara detectada en la imagen, y necesito asegurarme de que esta área sea visible en la versión recortada.

Tengo un área de enfoque dada por Eg. Face_Height, face_width, face_center_x y face_center_y. Estos valores son porcentajes de dimensiones de la imagen original.

Lo que quiero hacer es conseguir un EG. Miniatura 60x60. El enfoque normal sería cambiar el tamaño para que la altura o el ancho de la imagen sea igual 60px y luego recorte un 60x60 desde el centro, así:

mogrify -resize 60x -gravity 'Center' -crop 60x60 image.jpg

¿Qué enfoque se puede enfocar en mi cultivo en un área determinada en su lugar?

Estoy pensando en una solución que incluye varios caminos:

  1. Si el área de la cara es más grande que la miniatura deseada, cambie el tamaño de la imagen lo suficiente para que toda la cara sea visible en 60x60 píxeles, luego recorte
  2. Si el área de la cara es más pequeña que la miniatura deseada, entonces recorte "expandir" el área de mi cara hasta que mi pulgar deseado pueda caber dentro del área. Luego recorte. Supongo que necesito asegurarme de que esto no exceda los límites de la imagen original.

¿Hay un enfoque más inteligente? ¿Puedes intentar hacer algún código de ejemplo?

¡Gracias!

¿Fue útil?

Solución

Primero haría la aritmética en script o programa, luego alimentaría coordenadas exactas a ImageMagick.

Los pasos aritméticos:

  • Será más fácil operar con valores exactos de píxeles que porcentajes, por lo que convierta face_height, face_width, face_center_x y face_center_y a valores de píxeles.
  • Querrá una miniatura rectangular, así que elija el lado más largo y opere con eso:

    longest_side = max(face_height, face_width)

  • Ahora puede calcular el punto superior izquierdo para su cosecha:

    Crop_x = face_center_x - Longest_side / 2
    Crop_y = face_center_y - Longest_side / 2

  • Si alguna de las cuatro esquinas de cultivos cae fuera de las dimensiones de su imagen, ajuste para eso:

    • crop_x y crop_y deberían ser> = 0
    • crop_x + longest_side debería ser menor que el ancho de la imagen
    • crop_y + longest_side debería ser menor que la altura de la imagen

Habiendo calculado estos, ImageMagick Call se vuelve bastante sencillo:

mogrify -crop {longest_side}x{longest_side}+{crop_x}+{crop_y} -resize 60x60 image.jpg   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top