2012-02-28 16 views
7

Me gustaría rotar una imagen (con un ángulo de rotación definido por el usuario), pero sin hacer que la imagen sea más pequeña.Girar imagen * sin * cambiar el tamaño

  1. es lo que sucede ya, ahorrando el área sombreada como una imagen más pequeña
  2. es lo que me gustaría, la línea discontinua ser el nuevo tamaño de la imagen.

El servidor tiene PHP 5.3+. Enlaces, códigos y explicaciones muy bienvenidos.

+2

Sería de gran ayuda para saber cómo se está girando la imagen. – JJJ

+1

Mira http://php.net/manual/en/function.imagerotate.php y revisa la función 'imagerotateEquivalent()'. Creo que algo así podría usarse para lograr algo como esto. – Cyclonecode

+0

Parece que "buscó mucho en Google" pero no pensó en revisar los comentarios en la página de manual de 'imagerotate'. –

Respuesta

2

Esto no es una respuesta completa pero tomaría las cuatro esquinas a medida que las coordenadas las rote por su ángulo y luego calcule el nuevo cuadro delimitador según la extensión de las nuevas coordenadas. (asumiendo las coordenadas con origen en la parte inferior izquierda).

corners = rotate_each ([(left,top) (left,bottom), (right,top), (right,bottom)], angle) 
new_bb_left = min([corners[0].x, corners[1].x, corners[2].x, corners[3].x]) 
new_bb_right = max([corners[0].x, corners[1].x, corners[2].x, corners[3].x]) 
new_bb_bottom = min([corners[0].y, corners[1].y, corners[2].y, corners[3].y]) 
new_bb_top = max([corners[0].y, corners[1].y, corners[2].y, corners[3].y]) 
1

Esta podría ser una manera de hacerlo. Calcula el ancho diagonal.

Check this image for the formula

PHP tiene una función de raíz cuadrada: http://se2.php.net/manual/en/function.sqrt.php De esa manera usted debe tener la longitud de la diagonal, que se podría aplicar en la imagen transformada.

Cuestiones relacionadas