Foros del Web » Programando para Internet » PHP »

binario de imagenes

Estas en el tema de binario de imagenes en el foro de PHP en Foros del Web. Tengo el script colaborado por Cluster de meter imagenes en la base de datos, a la verdad tengo bastantes imagenes, aunque no se si es ...
  #1 (permalink)  
Antiguo 29/03/2005, 21:56
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
binario de imagenes

Tengo el script colaborado por Cluster de meter imagenes en la base de datos, a la verdad tengo bastantes imagenes, aunque no se si es por el servidor me funciona un poco lento, pero bueh, el caso es que he metido ciento de fotos y dentro de ellas tengo algunas que estan dobladas...

Hay alguna forma en que yo pueda voltearla al lado correcto en php?, o obligatoriamente tendria que subirla de nuevo?, lo que es un poco dificultoso porque son muchas las que tengo malas.....
  #2 (permalink)  
Antiguo 30/03/2005, 00:26
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
imagerotate con la librería GD de PHP, busca en el manual, porq yo no tengo nada a mano o googlea.
Saludos
__________________
Dios dira que esto no es justo, pero lo sera...
  #3 (permalink)  
Antiguo 30/03/2005, 09:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Veamos ..

1) .. Tu tienes identificado ya que "id's" de imagenes (de la tabla que las guarda). O bajo que criterio sabes cual hay que aplicar el proceso (como para hacer alguna rutina automática para tal fin..)

2) Debes definir que es eso de "voltear al lado correcto" .. Tu como "humano" lo sabes .. pero si quieres algo automático tendrás que identificar eso de alguna forma "logicamente" .. (o las que están "mal" están todas "volteadas" hacia el mismo lado?) ...


Sobre el tema de que tu BD o servidor está "lento" .. En el mismo tutorial que vistes .. se menciona esa técnica concreta para gestionar archivos binarios (en realidad da igual si son imagenes u otro tipo de archivos binarios). En determinados casos no es lo más óptimo (imagenes de gran peso .. o mucha cantidad (se que el termino "mucho" es ambigüo .. pero no tengo datos como para "demostrarlo"). De todo esto se comenta en las respuestas de los usuarios de dicho mini-tutorial.

Un saludo,
  #4 (permalink)  
Antiguo 30/03/2005, 19:19
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
Cita:
Iniciado por Cluster
Veamos ..

1) .. Tu tienes identificado ya que "id's" de imagenes (de la tabla que las guarda). O bajo que criterio sabes cual hay que aplicar el proceso (como para hacer alguna rutina automática para tal fin..)
Bueno a la verdad estoy desarrolando una parte de administracion de la galeria por la que puedo ver las imagenes, (no mas que el archivo, listar_imagenes.php), y entonces si yo veo una foto mala ahi es que quiero crear algo, todavia no se me ocurre como.

Cita:
Iniciado por Cluster
2) Debes definir que es eso de "voltear al lado correcto" .. Tu como "humano" lo sabes .. pero si quieres algo automático tendrás que identificar eso de alguna forma "logicamente" .. (o las que están "mal" están todas "volteadas" hacia el mismo lado?) ...
Realmente es manual que lo quiero voltear pero que metodo tendria que utilizar en php para voltear al lado que yo le asigne por medio de una variable?



Cita:
Iniciado por Cluster
Sobre el tema de que tu BD o servidor está "lento" .. En el mismo tutorial que vistes .. se menciona esa técnica concreta para gestionar archivos binarios (en realidad da igual si son imagenes u otro tipo de archivos binarios). En determinados casos no es lo más óptimo (imagenes de gran peso .. o mucha cantidad (se que el termino "mucho" es ambigüo .. pero no tengo datos como para "demostrarlo"). De todo esto se comenta en las respuestas de los usuarios de dicho mini-tutorial.
La rapidez de los archivos binarios por medio de la DB se puede optimizar mas si consigo un servidor para esa pagina en vez de un hosting compartido?
  #5 (permalink)  
Antiguo 30/03/2005, 23:17
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 567
Antigüedad: 13 años, 2 meses
Puntos: 0
es verdad lo que dice cluster!!!!

yo tambien pense eso!!!!!!!!, aja y que tal si una imagen aparece por decir un carro boca arriba, como hago para voltearlo?????, hay que hacer dos consideraciones.

1. solo puedes corregir eso despues de que la hallas insertado y pues haber observado tu como administrador que la foto esta mala y que no deseas que salga asi.

2. lo que podrias hacer en dicho caso es una actualizacion de esa foto, en dicha actualizacion si tendrias que utilizar algun procedimiento de GD que no se cual es para que te voltee las imagenes que quieras.

3. puedes implementar en esa parte de administrador una serie de checkbox donde vallas seleccionado cuales de las imagenes quieres voltear y aplicar dicho metodo GD que te voltea las imagenes que no se cual es, mas arriba en este tema mencionaron una funcion no se si te sirva.

bueno eso es todo lo que creo que debes considerar.

bye.
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #6 (permalink)  
Antiguo 31/03/2005, 06:58
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Lo q yo haría es una galería rápida, para poder visualizar las imágenes, anotar por ID cuales son las q hay q rotar 90º, cuales 180º, cuales 260º, luego solo sería cuestión de pasar los ID como parámetros para poder rotar cada imagen en el ángulo correcto.
Puedes leer como usar imagerotate() en http://ar2.php.net/imagerotate.
Código PHP:
<?php

// $imgSrc - GD image handle of source image
// $angle - angle of rotation. Needs to be positive integer
// angle shall be 0,90,180,270, but if you give other it
// will be rouned to nearest right angle (i.e. 52->90 degs,
// 96->90 degs)
// returns GD image handle of rotated image.
function ImageRotateRightAngle$imgSrc$angle )
{
   
// ensuring we got really RightAngle (if not we choose the closest one)
   
$angle min( ( (int)(($angle+45) / 90) * 90), 270 );

   
// no need to fight
   
if( $angle == )
       return( 
$imgSrc );

   
// dimenstion of source image
   
$srcX imagesx$imgSrc );
   
$srcY imagesy$imgSrc );

   switch( 
$angle )
       {
       case 
90:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$x$x$y11);
           break;

       case 
180:
           
$imgDest ImageFlip$imgSrcIMAGE_FLIP_BOTH );
           break;

       case 
270:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$srcX-$x-1$x$y11);
           break;
       }

   return( 
$imgDest );
}
?>
Esta función la copié de ahí, según lo q dice sirve para rotar en 90, 180 y 260, puedes ver como implementarla.
Aunque en realidad te recompendaría esto como algo provisorio, luego deberías, con paciencia, acomodar las imgs en tu server.
__________________
Dios dira que esto no es justo, pero lo sera...
  #7 (permalink)  
Antiguo 31/03/2005, 08:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues si .. la base sería lo que comenta sebtev

De tu listar imagenes .. que ahora hace un "ver_imagen?id=..." .. ahí en ese ver_imagen.php .. tendrías que llamar a su vez a otro script que haga ese proceso ..

El proceso es el código que te mostró sebtv . .ahí le tendrás que pasar la acción a realizar (hacia donde hay que rotar)

Podrías generar unos links tipo:
<a href="rotar_imagen?id=<? echo $_GET['id'] ?>nose&angulo=90">rotar 90°</a>
<a href="rotar_imagen?id=<? echo $_GET['id'] ?>nose&angulo=180">rotar 180°</a>

en ver_imagen.php (no recuerdo bien los nombres de las variables para el ID de la imagen .. revisalo).

rotar_imagen.php
Código PHP:
<?
function ImageRotateRightAngle$imgSrc$angle ) {
// el código ...
}

// la llamada a la función
// Primero tendrás que hacer una consulta a tu BD para obtener la imagen . .es igual el código que ver_thumbnail.php

$conexion=mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD"); 
    
mysql_select_db("tu_bd") or die ("no se ha podido seleccionar la BD"); 
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta mysql_query($sql,$conexion); 
    
$imagen mysql_result($consulta,0,"archivo_binario"); 

    
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG 
    
Header ("Content-type: image/jpeg"); 

    
$imgSrcimagecreatefromstring($imagen); 

$dst_img=ImageRotateRightAngle($imgSrc$_GET['angulo']) {

imagejpeg($dst_img,'',100); 


?>
Con eso verías la imagen rotada .. (por qué usa las cabeceras HTTP header() ...).

Ahora .. si a su vez quieres guardarla en la BD en ese mismo campo de imagen (pero ya rotada (tratada)) ..mm ahí tendrías que probar .. no sé si si habría que capturar el buffer de salida (ob_get_contents() ...) o con $dst_img te sobraría para hacer el UPDATE a ese registro ..

Intenta ir por partes .. primero que te funcion la rutina de rotación .. y luego ya vamos viendo los otros temas.

Un saludo,

Última edición por Cluster; 31/03/2005 a las 08:07
  #8 (permalink)  
Antiguo 03/04/2005, 15:48
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
Funciona bien el unico problema esta en lo que decia Cluster de al querer guardarla de nuevo en la DB se me ha heacho un imposible

Código PHP:
<?php
include('../inc/conect.php');
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
    
$consulta mysql_query($sql,$db_conn);
    
$imagen mysql_result($consulta,0,"archivo_binario");

    
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG
//echo "<a href=\"rotar_imagen?id=".$_GET['id']."&angulo=".$_GET['angulo']."&accion=guardar\">Guardar</a>";

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

    
$imgSrcimagecreatefromstring($imagen);
$dst_img=ImageRotateRightAngle($imgSrc$_GET['angulo']);

// $imgSrc - GD image handle of source image
// $angle - angle of rotation. Needs to be positive integer
// angle shall be 0,90,180,270, but if you give other it
// will be rouned to nearest right angle (i.e. 52->90 degs,
// 96->90 degs)
// returns GD image handle of rotated image.
// la llamada a la función
// Primero tendrás que hacer una consulta a tu BD para obtener la imagen . .es igual el código que ver_thumbnail.php

function ImageRotateRightAngle$imgSrc$angle )
{
   
// ensuring we got really RightAngle (if not we choose the closest one)
   
$angle min( ( (int)(($angle+45) / 90) * 90), 270 );

   
// no need to fight
   
if( $angle == )
       return( 
$imgSrc );

   
// dimenstion of source image
   
$srcX imagesx$imgSrc );
   
$srcY imagesy$imgSrc );

   switch( 
$angle )
       {
       case 
90:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$x$x$y11);
           break;

       case 
180:
           
$imgDest ImageFlip$imgSrcIMAGE_FLIP_BOTH );
           break;

       case 
270:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$srcX-$x-1$x$y11);
           break;
       }

   return( 
$imgDest );


$imagen_volteada imagejpeg($dst_img,'',100);
imagejpeg($dst_img,'',100);

?>
<a href="?id=<?=$_GET['id']?>&angulo<?=$_GET['angulo']?>&accion=guardar">  GUARDAR </a> //Aqui es que esta el problema, el link no me aparece debido a que el header() es de jpg, 
<?php
if($_GET['accion'] == "guardar"){
global 
$imagen_volteada;
    
$binario_contenido addslashes(fread(fopen($imagen_volteada"r"), filesize($imagen_volteada))); 
    
$binario_peso=$_FILES[$imagen_volteada]['size']; 
    
$binario_tipo=$_FILES[$imagen_volteada]['type']; 
    
$consulta_insertar "INSERT INTO archivos (archivo_binario,archivo_peso,archivo_tipo) VALUES ('$binario_contenido','$binario_peso', '$binario_tipo')"
    
mysql_query($consulta_insertar,$db_conn) or die("No se pudo insertar los datos en la base de datos."); 


}
?>

Bien mi problema lo puse en comentario y es que el link que pongo para poder guardar la imagen rotada, no me aparece porque el header es de jpg,...

no se puede enviar header tantos jpg como para texto para que funcionen, no entiendo mucho lo de lo headers, lo unico que se es que me funcionan para redirecionar con lo de header("Location:..."), pero bueh que debo hacer para poder guardar en la db?
  #9 (permalink)  
Antiguo 04/04/2005, 20:19
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
help plis!
  #10 (permalink)  
Antiguo 04/04/2005, 23:16
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Porq no pruebas q la guarde automáticamente, sin q la tengas q ver vos si ya sabes q esa img debes rotar es decir
Código PHP:
mysql_db_query($db"INSERT INTO archivos (archivo_binario,archivo_peso,archivo_tipo) VALUES ('$binario_contenido','$binario_peso', '$binario_tipo')"
__________________
Dios dira que esto no es justo, pero lo sera...
  #11 (permalink)  
Antiguo 05/04/2005, 10:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
no se puede enviar header tantos jpg como para texto para que funcionen, no entiendo mucho lo de lo headers, lo unico que se es que me funcionan para redirecionar con lo de header("Location:..."), pero bueh que debo hacer para poder guardar en la db?
No, .. la función header() de PHP simplemente sirve para enviar cabeceras HTTP al navegador (cliente mejor dicho) .. que tipo de cabeceras envies a este y que haga este con ellas es otra cosa.

De hecho la cabecera más típica usada de HTTP es la de "Location" que indica "redirección" (o dicho de otra forma le dice a tu navegador: "oye, cargate esta página que te indico aquí .. desecha lo otro que se esté viendo").

Pero, .. como cabeceras HTTP . .otras son por ejemplo las de "content-type" que le dicen al navegador: "Los datos que te voy a enviar son de tal tipo .. ajustate para que se vea o se interprete bien ...".

----------------

Sobre el problema concreto de almacenar esa imagen generda ..

Usando el control del buffer de PHP (como te comentaba antes .. ):

1) No uses header("Content-type") .. (realmente no sé si quieres ver el resultado y guardar en tu BD en el instante o vas a tener un script que mostrará un "previo" y de ahí se tenga que realizar el proceso de almacenamiento en tu BD si se acepta .. pues sería lo lógico).

2) Todo esto no corresponde .. se supone que la imagen la obtienes de TU BD .. así que no sé por qué la lees de un archivo (fread() si este no existe:
Código PHP:
// elimila todo esto ... 
$binario_contenido addslashes(fread(fopen($imagen_volteada"r"), filesize($imagen_volteada))); 
    
$binario_peso=$_FILES[$imagen_volteada]['size']; 
    
$binario_tipo=$_FILES[$imagen_volteada]['type']; 
3) NO sé si vas a actualizar el registro que contiene tu imagen (mal) con el volteo aplicado o crear un nuevo registro .. pero si es lo primero no corresponde hacer un INSERT sino un UPDATE bajo ese $_GET['id'] de imagen.

4) Captura en el buffer el resultado de la función de volteo ...

Código PHP:
ob_start();
// $imagen_volteada = imagejpeg($dst_img,'',100);  <-- quita esto
imagejpeg($dst_img,'',100); 

$binario_contenido ob_get_contents();
ob_end_clean(); 
5) Por aquí ya puedes hacer tu UPDATE o INSERT con $binario_contenido

Recuerda que este script que haga este proceso se ha de ejecutar por separado .. nada de mezclaro con otras cosas. De hecho al terminar el proceso tendrías que redireccionar automáticamente a donde gustes:

Código PHP:
header("Location: nose.php");
exit; 
Por eso .. si quieres hacer un "previo" de como queda tu imagen volteada (en diferentees angulos) tendrás que tener dos scripts .. uno para ese "previo" y otro para el proceso de guardar a tu BD el resultado aplicacando exactamente lo mismo .. pero sin el "content-type" de header() y otro HTML que uses por médio ..

Cuando se usan cabeceras HTTP .. nos e pueden enviar otras cabeceras antes al navegador .. por eso es necesario separar procesos en scripts aparte que se van llamando de unos a otros ..

Un saludo,
  #12 (permalink)  
Antiguo 05/04/2005, 23:11
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
Heavy, mas adelante lo chequeare y te dire k tal, gracias muchas de verdad
  #13 (permalink)  
Antiguo 07/04/2005, 21:07
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
Bien, las ideas las tenia todas pero aun no me salen

mi archivo rotar_foto_preview.php:
Código PHP:
<?php
include('../inc/conect.php');
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
    
$consulta mysql_query($sql,$db_conn);
    
$imagen mysql_result($consulta,0,"archivo_binario");
Header ("Content-type: image/jpeg");
$imgSrcimagecreatefromstring($imagen);
$dst_img=ImageRotateRightAngle($imgSrc$_GET['angulo']);

// $imgSrc - GD image handle of source image
// $angle - angle of rotation. Needs to be positive integer
// angle shall be 0,90,180,270, but if you give other it
// will be rouned to nearest right angle (i.e. 52->90 degs,
// 96->90 degs)
// returns GD image handle of rotated image.
// la llamada a la función
// Primero tendrás que hacer una consulta a tu BD para obtener la imagen . .es igual el código que ver_thumbnail.php

function ImageRotateRightAngle$imgSrc$angle )
{
   
// ensuring we got really RightAngle (if not we choose the closest one)
   
$angle min( ( (int)(($angle+45) / 90) * 90), 270 );

   
// no need to fight
   
if( $angle == )
       return( 
$imgSrc );

   
// dimenstion of source image
   
$srcX imagesx$imgSrc );
   
$srcY imagesy$imgSrc );

   switch( 
$angle )
       {
       case 
90:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$x$x$y11);
           break;

       case 
180:
           
$imgDest ImageFlip$imgSrcIMAGE_FLIP_BOTH );
           break;

       case 
270:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$srcX-$x-1$x$y11);
           break;
       }

   return( 
$imgDest );
}

ob_start();
imagejpeg($dst_img,'',100);
$binario_contenido ob_get_contents();
//ob_end_clean(); 
header("Location: rotar_imagen.php?id=".$_GET['id']);
exit; 
?>

Mi archivo rotar_imagen:

Código PHP:
<?
include('../inc/conect.php');
global 
$binario_contenido// ESTE VALOR NO LO ESTA OBTENIENDO
    
$id $_GET['id'];
    
$consulta_update "UPDATE archivos SET archivo_binario = '$binario_contenido'"
    
mysql_query($consulta_update,$db_conn) or die("No se pudo actuzalizar los datos en la base de datos."); 

    
$sql "SELECT archivo_binario,archivo_tipo FROM archivos WHERE id='".$_GET['id']."'"
    
$consulta2 mysql_query($sql,$db_conn); 
    
$datos mysql_result($consulta2,0,"archivo_binario"); 
    
$tipo mysql_result($consulta2,0,"archivo_tipo"); 
    
header("Content-type: $tipo"); 
    echo 
$datos
    
    
?>

en este segundo archivo aparece de nuevo la variable $binario_contendo, el cual he tratado de varias formas pasar su valor al archivo pero no he podido como lo podria hacer??, y alguna idea para poder hacer el previe sin tener k grabar
  #14 (permalink)  
Antiguo 08/04/2005, 12:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé por qué haces esto o con qué fin:
global $binario_contenido; // ESTE VALOR NO LO ESTA OBTENIENDO

Debes saber que en PHP las variables "mueren" al terminar tu script .. así que de rotar_foto_preview.php a rotar_foto .. -a no ser- que propagues por el URL, por una cookie o sesión alguna variable de las que necesitarías usar entre uno y otro script .. no vas a obtener nada del anterior. (esto es lo básico de como funciona PHP y en general cualquier lenguaje del "lado del servidor" de este estilo).

Por otro lado en rotar_imagen.php ... debes hacer exactamente lo mismo que en el preview .. sólo que NO presentas nada al navegador= nada de header() .. pues no corresponde en ese script ...

Tienes que pasar a rotar_imagen.php también las variables que informan el "angulo" ..

header("Location: rotar_imagen.php?id=".$_GET['id']."&angulo=".$_GET['angulo']);

Hazte la idea que tienes que hace el mismo proceso que haces para el previo .. pero sin mostrar nada y con el código que hace el "ob_xxx()" para capturar el buffer de salida de pHP y dejarlo en una variable .. la cual irá a tu sentencia SQL de UPDATE .. que por cierto también tendrá que ser "condicianal" .. sino actualizaras toda tu BD con ese mismo dato (imagen rotada) (hazte copia de seguridad antes de probar nada de tus BD).

Código PHP:
$consulta_update "UPDATE archivos SET archivo_binario = '$binario_contenido' WHERE id='".$_GET['id']."'"
    
mysql_query($consulta_update,$db_conn) or die("No se pudo actuzalizar los datos en la base de datos."); 
Y esto como último proceso tras la aplicación de la función de rotado y captura de datos por el código de ob_xxx() ...


Un saludo,
  #15 (permalink)  
Antiguo 08/04/2005, 22:57
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 14 años, 2 meses
Puntos: 0
Aun utilizando el bufer, que ya lei por cierto de este tipo de procedimeinto, no funciona, no adquiere nada del bufer:

Código PHP:
<?php
ob_start
();
include(
'../inc/conect.php');
// $imgSrc - GD image handle of source image
// $angle - angle of rotation. Needs to be positive integer
// angle shall be 0,90,180,270, but if you give other it
// will be rouned to nearest right angle (i.e. 52->90 degs,
// 96->90 degs)
// returns GD image handle of rotated image.
// la llamada a la función
// Primero tendrás que hacer una consulta a tu BD para obtener la imagen . .es igual el código que ver_thumbnail.php
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
    
$consulta mysql_query($sql,$db_conn);
    
$imagen mysql_result($consulta,0,"archivo_binario");
$imgSrcimagecreatefromstring($imagen);
function 
ImageRotateRightAngle$imgSrc$angle )
{
   
// ensuring we got really RightAngle (if not we choose the closest one)
   
$angle min( ( (int)(($angle+45) / 90) * 90), 270 );

   
// no need to fight
   
if( $angle == )
       return( 
$imgSrc );

   
// dimenstion of source image
   
$srcX imagesx$imgSrc );
   
$srcY imagesy$imgSrc );

   switch( 
$angle )
       {
       case 
90:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$x$x$y11);
           break;

       case 
180:
           
$imgDest ImageFlip$imgSrcIMAGE_FLIP_BOTH );
           break;

       case 
270:
           
$imgDest imagecreatetruecolor$srcY$srcX );
           for( 
$x=0$x<$srcX$x++ )
               for( 
$y=0$y<$srcY$y++ )
                   
imagecopy($imgDest$imgSrc$srcY-$y-1$srcX-$x-1$x$y11);
           break;
       }

   return( 
$imgDest );
}
$dst_img=ImageRotateRightAngle($imgSrc$_GET['angulo']);
$binario_contenido ob_get_contents();
ob_end_clean(); 
$consulta_update "UPDATE archivos SET archivo_binario = '$binario_contenido' WHERE id='".$_GET['id']."'";
mysql_query($consulta_update,$db_conn) or die("No se pudo actuzalizar los datos en la base de datos."); 
echo 
$binario_contenido;
//header("Location: ver.php?id=".$_GET['id']."");
//exit; 
?>
  #16 (permalink)  
Antiguo 11/04/2005, 10:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es normal que "no adquira nada del buffer" .. Por qué el "echo" que haces de $binario_contenido debes hacerlo entre un ob_start() y un ob_get_contents() .. dicha función "captura" lo que se tenga en el buffer de salida en ese intante ..Esa "salida" se origina cuando tu haces un "echo" por ejemplo .. o un "readfile()" ..

Pero en tu caso .. no es un "echo" lo que tienes que hacer .. sino usar la función:

imagejpeg($dst_img,'',100);

que de por sí . .si no se indica un archivo . .entrega su resultado al buffer de salida. (esto te lo había comentado unos mensajes atras ..).


Un saludo,
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 07:42.