Rotar imágenes con PHP

Existe una maravillosa función en PHP que nos ayuda en esta tarea, es imagerotate()
resource imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent= 0 ] )
Pero existe un gran problema: esta función solo está disponible si PHP está compilado con la versión incrustada de la librería GD, que no es muy habitual. Para solucionarlo podemos rompernos la cabeza y girar a mano las imágenes, pero ¿para qué vamos a hacer tonterías? La solución (o una de ellas) es transponer cada píxel de la imagen hacia el lado que queremos rotar. Suponiendo que queremos rotar la imagen 90 grados en el sentido de las agujas del reloj: - generamos una imagen nueva que tenga las dimensiones de la original pero intercambiando la x por la y. - Empezando por la esquina superior izquierda, cogemos ese píxel y lo colocamos en la esquina superior derecha. - El segundo píxel superior de la izquierda (el que está a la derecha del anterior) lo colocamos en la esquina superior derecha, justo debajo del anterior... - y así sucesivamente... La función:

/**
 * esta funcion sirve para rotar imagenes 90 grados en el sentido de la agujas del reloj
 *
 * @param string $origen
 * @param string $destino
 * @return bool
 */

function rotarImagenGif($origen, $destino){
        //obtenemos las dimensiones de la imagen a girar
        $tamano=GetImageSize($origen);
        //tamaño de la imagen en ancho y largo
        $tamano_x=$tamano[0];
        $tamano_y=$tamano[1];
        //creamos una imagen en memoria a partir de la imagen de origen
        $origen=imagecreatefromgif($origen);
        //creamos un liezo de imagen con las medidas transpuestas
        $resultado=ImageCreateTrueColor($tamano_y,$tamano_x);
        for( $x=0; $x<$tamano_x; $x++){
                for($y = 0; $y < $tamano_y; $y++){
                $distancia_x = $tamano_y - ($y+1);
                $distancia_y = $x;
                // copiamos cada pixel por separado de la imagen original a la nueva imagen con el lienzo rotado
                imagecopy($resultado, $source, $distancia_x, $distancia_y, $x, $y, 1, 1);
                }
        }
        //guardamos la imagen rotada en la ruta de destino
        imagegif($resultado, $destino);
        return true;
}

También puedes rotar imágenes con jQuery.

5 comentarios sobre "Rotar imágenes con PHP"

nico
No sabes como puedo hacer para guardar la imagen rotada dentro de un campo blob de mi mysql o en un archivo temporal?
Mi intencion es hacer lo mismo que hace facebook para rotar imagenes.
Saludos.
mamel
<p>para almacenar imagenes en mysql sigue este enlace: <a href="http://blog.juegosocio.com/almacenar-imagenes-en-mysql.html">imagenes en mysql</a></p>
nico
Hola mamei. Gracias por responder.
Lo que yo quiero es rotar la imagen pero nunca trabajo con archivos reales sino con codigo almacenado en la db.
$content = mysql_fetch_array($result);
$source = imagecreatefromstring($content);
header('Content-type: image/jpeg');
$rotate = imagerotate($source, $degrees, 0);
hasta aca funciona todo bien pero no se como guardar estos cambios en mi mysql.
mamel
una vez rotada la imagen aplicale el base 64 encode y guarda los cambios en la base de datos
mamel
vale, falta un paso, despues de rotada, lo mas facil es salvar el archivo, y a partir de ahi como en el enlace de arriba