Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Renderizar Imagen , guardarla y mostrarla

Estas en el tema de Renderizar Imagen , guardarla y mostrarla en el foro de PHP en Foros del Web. Edit: Flashie cualquiera con el titulo era Redimensionar Hola gente , de vuelta yo por acá :P pero ahora con otro problema. Mi idea es ...
  #1 (permalink)  
Antiguo 12/07/2013, 21:05
 
Fecha de Ingreso: octubre-2011
Ubicación: Rosario
Mensajes: 30
Antigüedad: 12 años, 6 meses
Puntos: 1
Renderizar Imagen , guardarla y mostrarla

Edit: Flashie cualquiera con el titulo era Redimensionar


Hola gente , de vuelta yo por acá :P pero ahora con otro problema.

Mi idea es subir la imagen , redimensionar y guardarla en la base de datos
he aquí el código y mis dudas.

ModifiedImage.php es sacado del foro ahi no hay error.

Mi problema es el siguiente , se crea un objeto de la imagen a subir , se la redimensiona a las medidas requeridas y después de eso , la tengo que pasar a binario para almacenarla a la base de datos , es ahí el problema , para pasarla uso la siguiente línea
$archivo_binario = addslashes (fread(fopen($image , "rb"), filesize($image)));
el problema es que si pongo la imagen redimensionada, no me deja porque es un objeto , entonces lo que pensé es pasarla a string con
$pasoAString = serialize($image);
pero me tira el siguiente error.
Warning: fread() expects parameter 1 to be resource, boolean given in

Una posible solución seria no usar POO para redimensionar .(si es que es posible) (estoy buscando como hacerlo)

Aclaro que el problema esta en la redimensiacion, ya que sin eso el código anda lo mas bien (solo que tengo que redimensionalas a mano )

Si alguno me puede aclarar mis dudas joya.


Código PHP:
if(isset($_POST['enviando'])){

    
$archivo $_FILES["archivo_asubir"]["tmp_name"];
    
$destino "Upload/".$_FILES["archivo_asubir"]["name"];
    
$tipo $_FILES["archivo_asubir"]["type"];
    
$tamanio $_FILES["archivo_asubir"]["size"];
    
$tamanioMAX 5242880;
    
//$archivo_binario = addslashes (fread(fopen($archivo, "rb"), 
filesize($archivo)));
    
    if (!
$archivo == "" )
    {
        if( 
$tamanio $tamanioMAX ){

                if( 
$tipo == "image/jpeg" || $tipo == "image/bmp" || $tipo == "image/jpg" || $tipo == "image/png" ){
                require_once 
'ModifiedImage.php';
 
                
$image = new ModifiedImage($archivo);
                
$image->resizeToFit(120120true'ffffff');
                
$pasoAString serialize($image);
                
$archivo_binario addslashes (fread(fopen($pasoAString"rb"), filesize($pasoAString)));
                
move_uploaded_file($pasoAString,$destino);
                    echo 
"<font color='green'>Archivo subido Correctamente</font><br>";
                    
                }
                else
                { 

Última edición por WalkerHugo; 12/07/2013 a las 21:12
  #2 (permalink)  
Antiguo 12/07/2013, 23:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Renderizar Imagen , guardarla y mostrarla

Lo que hace el método resizeToFit() (y la mayoría de métodos de esa clase) es manipular la imagen y conservarla en memoria. Requieres usar save() para guardarla en disco, o bien, output() para obtener el código, pero creo que a ese método le falta un return $this->_image.

Luego, serialize es para "codificar" un array en una cadena, por lo que vas a obtener un error y todo lo que sigue después estará mal.

Para poder guardar el código de la imagen creo que deberías usar base64_encode(), porque, seguramente addslashes() hará cosas impredecibles con ella.

Y no creo que los errores que tienes sean causados por la programación orientada a objetos, sino por no conocer del todo esa clase.

Edición:

Otra cosa, move_uploaded_file() funciona sólo con archivos subidos por formulario, no con códigos ni archivos modificados por ti. Entonces creo que sólo necesitas $image->save('ruta/y/nombre.extension');

Modifiqué el método output para que quede así:
Código PHP:
Ver original
  1. public function output()
  2.     {
  3.         if($this->_imageType == IMAGETYPE_JPEG){
  4.             imagejpeg($this->_image);
  5.         }
  6.         elseif($this->_imageType == IMAGETYPE_GIF){
  7.             imagegif($this->_image);
  8.         }
  9.         elseif($this->_imageType == IMAGETYPE_PNG){
  10.             imagepng($this->_image);
  11.         }
  12.                 // Faltaba agregar esto para obtener la imagen
  13.                 return $this->_image;  
  14.     }
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 13/07/2013 a las 00:03
  #3 (permalink)  
Antiguo 13/07/2013, 13:52
 
Fecha de Ingreso: octubre-2011
Ubicación: Rosario
Mensajes: 30
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Renderizar Imagen , guardarla y mostrarla

Muchas Gracias Triby , funciona bien.
Lo deje de la siguien manera por si alguno tiene la misma duda

Código PHP:
if( $tipo['mime'] == "image/jpeg" || $tipo['mime'] == "image/bmp" || $tipo['mime'] == "image/jpg" || $tipo['mime'] == "image/png" )
                {
                    
                    require_once 
'ModifiedImage.php';
                     
$image = new ModifiedImage($archivo);
                    
$image->resizeToFit(120120false,'000000'); 
                    
$image->save($destino);
                    
$foto $image->output();
                    
                    echo 
"<font color='green'>Archivo subido Correctamente</font><br>";
                    
                }

Asi lo guardo.
mysql_query("INSERT INTO noticias(Id,Contenido,Titulo,imagen,Categoria,Fecha,Ip) VALUES ('', '$_POST[contenido]', '$_POST[titulo]', '$foto', '$_POST[categoria]', NOW(), '$_SERVER[REMOTE_ADDR]')"); 

Etiquetas: redimensionar
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 12:46.