Foros del Web » Programando para Internet » PHP »

rotar imagen 90º

Estas en el tema de rotar imagen 90º en el foro de PHP en Foros del Web. Buenas a todos tengo el siguiente problema como puedo rotar una imagen 90º con PhP atravez de un boton hay alguna forma de hacer esto... ...
  #1 (permalink)  
Antiguo 23/09/2003, 08:24
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 22 años
Puntos: 2
rotar imagen 90º

Buenas a todos tengo el siguiente problema
como puedo rotar una imagen 90º con PhP atravez de un boton
hay alguna forma de hacer esto...
desde ya muchas gracias y saludos a todos
  #2 (permalink)  
Antiguo 24/09/2003, 20:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Tienes muchos ejemplos en la red .. usando google salió unos cuantos:

http://www.vddh.com/wnailer/index.php?pag=rot

http://www.rccm.co.jp/~juk/php/php4t...est-rotate.php

Tal vez no te rote la imgan al darle a un botón (recuerda que con PHP sería cosa de "generar" y "pedir" una página nueva al servidor para que haga dicho proceso el servidor vía PHP y las extensiones GD que debes de tener instalas bajo tu PHP ..)

Y me salió otro tutorial que hace lo mismo pero con las librerias ImageMagick (en este caso las accede directamente .. no bajo extensión de PHP)

http://xbiz.com/articles/syndicate.php?article_idp=583

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 26/09/2003, 08:17
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 22 años
Puntos: 2
Gracias Cluster por responder
pero en este ejemplo de rotar la imagen

Código PHP:
<? 
 
 $source 
"624-278-16M-SE-ANV.jpg"

$size GetImageSize($source); 
$tot_x $size[0]; 
$tot_y $size[1]; 

header ("Content-type: image/jpeg"); 

$source ImageCreateFromJpeg($source); 

switch (
$angle){ 
case 
90// rotate dimensions 90° CW 
  
$result ImageCreateTrueColor ($tot_y$tot_x); 
  for(
$src_x 0$src_x $tot_x$src_x++){ // X loop 

   
for($src_y 0$src_y $tot_y$src_y++){  // Y loop 
    
$dst_x $tot_y - ($src_y 1); 
    
$dst_y $src_x
    
ImageCopy($result$source$dst_x$dst_y$src_x$src_y11); 
   } 

  } 
  break; 
case 
180// rotate dimensions 180° CW 
  // similar 
  
break; 
case 
270// rotate dimensions 270° CW or 90° CCW 
  // similar 
  
break; 
case 
mirror// mirror 
  // similar 
  
break; 
case 
flip// flip 
  // similar 
  
break; 
default: 


 
ImageJPEG($result); 
// better quality; mucho larger files: 
// ImageJPEG($result, '', 100); 
?>
me da el siguiente error
Código PHP:
<br />
<
b>Warning</b>:  imagejpeg(): supplied argument is not a valid Image resource in <b>c:inetpubwwwrootphptestlistado_chqrotaimage.php</bon line <b>41</b><br /> 
Bueno como dice en la pagina tengo puesta la libreria GD version 2.0.8,
Bueno a pesar de eso no entiendo el codigo donde muestra la imagen ya que la linea de error es
Código PHP:
ImageJPEG($result); 
  #4 (permalink)  
Antiguo 28/09/2003, 20:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Bueno .. (más vale tarde que nunca xD) .. No sé si habras resuelto tu problema .. pero ..

El error principal que tienes con ese código de ejemplo .. es que ese código está más bien pensado para que le pases cómo parámetro la variable $angle .. para que haga el "juego" con el switch() ..

rotar.php?angle=90

(y sólo está implementado el código para el rotado a 90º .. ademas que asume que usarías variabels globales .. sino usa $_GET ['angle'] en lugar del $angle ...)

Bien .. eso sería la solución a ese problema concreto .. pero, hechando un vistazo al manual oficial de PHP .. vemos que tenémos la función:

ImageRotate()
http://www.php.net/imagerotate

Y .. un ejemplo básico:

rotar.php
Código PHP:
<?

// Se llama al script:
// rotar.php?imagen=nombre_imagen&angulo=nº

$angulo=$_GET['angulo'];
$imagen=$_GET['imagen'];

$size GetImageSize($imagen);
$tot_x $size[0];
$tot_y $size[1];

header ("Content-type: image/jpeg");

$img ImageCreateFromJpeg($imagen);
$img ImageCreateFromJpeg($imagen);
$img ImageRotate($img,$angulo,0);

ImageJPEG($img);

?>
Y un ejemplo completo de uso ...

demo.php
Código PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Rotar imagenes</title>
</head>
<body>
<?php
$imagen
="007.jpg";  // tu imagen ..

for ($angulo=0$angulo <= 360$angulo += 90 ){
    echo 
"Rotación: ".$angulo."º<br>";
    echo 
"<img src=\"rotar.php?imagen=".$imagen."&angulo=".$angulo."\"><br><br>";
}
?>
</body>
</html>
PD: .. no requiere de GD 2.x .. por qué no usa "truecolor" funciones .. pero si quieres más calidad (de colores en tus imagenes) .. fijate en los comentarios de los usuarios de la función mencionada en el manual oficial de PHP, ahí verás ejemplos más completos que este.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 28/09/2003 a las 20:57
  #5 (permalink)  
Antiguo 25/05/2005, 19:17
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Hola CLUSTER, que sera que el excelente script que has colocado:
Código PHP:
<?

// Se llama al script:
// rotar.php?imagen=nombre_imagen&angulo=nº

$angulo=$_GET['angulo'];
$imagen=$_GET['imagen'];

$size GetImageSize($imagen);
$tot_x $size[0];
$tot_y $size[1];

header ("Content-type: image/jpeg");

$img ImageCreateFromJpeg($imagen);
$img ImageCreateFromJpeg($imagen);
$img ImageRotate($img,$angulo,0);

ImageJPEG($img);

?>
ME va perfectamente, pero la nueva imagen me la crea de 5 veces el tamaño original!!!.

Una imagen de 700 K me la deja de 4 Megas, y una de 350 K de 2 Megas y medio.

Las imagenes son JPG, y las creo simplemente con
Código PHP:
f(eregi('jpeg|jpg',$ext))$img=imagecreatefromjpeg($img); 
Y la almaceno como dee ser:
Código PHP:
imagejpeg($img,$dir_y_nombre); 
Es normal que me cree los nuevos graficos con + de 4 veces el tamaño real?
  #6 (permalink)  
Antiguo 26/05/2005, 08:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
mm Nunca probé el ejemplo ... pero lo que si que es cierto que si no indicas una tasa (o ratio) de compresión (calidad) para la función imagejpeg() creo que quedan las imagenes a un 75%, puedes probar con otros valores (calidad vs peso de la imagen generada)

De todas formas .. ahora que lo veo hay algo que no es correcto (de mi código original):

hay repetido dos:
$img = ImageCreateFromJpeg($imagen);

quita uno de ellos .. no sé hasta que punto influirá eso en la imagen final ..pero lo que es cierto es que de todas formas está de más uno de ellos.

Un saludo,
  #7 (permalink)  
Antiguo 27/05/2005, 06:04
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 9 meses
Puntos: 22
Profesor yo lo hago asi: (Para trabajar con las 4 extenciones)
Código PHP:
# Ext de la imagen:
    
$div=(explode('.',$nom));
    
$ext=array_pop($div); 
Y luego:
Código PHP:
# Proceso de IMG grande:
    
if(eregi('jpeg|jpg',$ext))$img=imagecreatefromjpeg($img);
    elseif(
eregi('gif',$ext))$img=imagecreatefromgif($img);
    elseif(
eregi('png',$ext))$img=imagecreatefrompng($img); 
Asi que como veras ese no es el problema.

A lo que no le he visto utilidad y por lo tanto omiti es a la parte:
Código PHP:
$size GetImageSize($imagen);
$tot_x $size[0];
$tot_y $size[1]; 
Aunque tambien prove dejando la linea, y el problema sigue =, con mi form envio 50/70 imagenes, y al final la nueva copia pesa 4 veces + que la original.

Yo me imagino que el rollo es por ser imagenes de entre 800 K y 1200 K, (de bastante calidad y peso), y que la funcion no esta pensada para esos tamaños de imagenes, pero lo cierto es que me salio mejor con PHP que esperar: http://www.forosdelweb.com/f23/exe-libre-para-rotar-imagenes-sin-que-pierdan-calidad-win-98-a-300382/.

Sin embargo, tener una imagen, (50/70/120 imagenes) de un tamaño de + de 4 Megas es algo obtuso si ella no excede los 2048 x 1360 pixeles....

DATICO:

Tu script me ha permitido rotar hasta 70 imagenes de dimensiones bastante grandes en un tiempo promedio de 50/60 minutos en mi Pc local win/98.

La velocidad de work DE PHP entonces siempre dependera del hardware?

Lo que + me interesa es que las imagenes me queden de un tamaño sobrio/NORMAL.

Incluso coloque
Código PHP:
    clearstatcache(); 
Al final de cada whiile() para ver si era rollo de memoria y tampoco funciono.

Sera por mandarle al procesador de PHP TANTAS imagenes TAN GRANDES de un solo tiro?.

GRACIAS!.
  #8 (permalink)  
Antiguo 27/05/2005, 10:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
No tendría que afectar para el tamaño final de la imagen que procesas que hagas muchas veces dicho proceso o no .. eso a lo sumo afectará al tamaño en memoria que consume durante el proceso y dependiendo de cada imagen original ...

Sobre el problema principal .. realmente no he tenido oportunidad de probar el código como para contarte que resultado en mi caso obtuve .. mira a ver si alguien puede probarlo en tus mismas condiciones (de las imagenes fuente) a ver que sucede ..

Un saludo,

PD: te respondí en tu otro mensaje sobre esa pregunta concreta (no lo hago aquí para no meclar temas ..)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:12.