mameyugo;

, 5 comentarios, 3886 lecturas, por: Jose Manuel Muras Rodrigo

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 sólo 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 que vamos a hacer tonterias. la solución (o una de ellas), es transponer cada pixel 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 pixel , y lo colocamos en la esquina superior derecha. - el segundo pixel superior de la izquierda (el que esta a la derecha de el anterior), lo colocamos en la esquina superior derecha, justo debajo del anterior... - y asi sucesivamente... la funcion:

/**
 * 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;
}

tambien puedes rotar imagenes con jQuery.

PHP

Comentarios sobre rotar imagenes con php

avatar
nico
21.Jul.2009
(rating: 4)
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.
avatar
mamel
07.Aug.2009
(rating: 4)

para almacenar imagenes en mysql sigue este enlace: imagenes en mysql

avatar
nico
27.Aug.2009
(rating: 5)
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.
avatar
mamel
31.Aug.2009
(rating: 5)
una vez rotada la imagen aplicale el base 64 encode y guarda los cambios en la base de datos
avatar
mamel
31.Aug.2009
(rating: 4)
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
Unete!