Foros del Web » Programando para Internet » PHP »

Ayuda urgente con codigo para cambiar tamaño de imagen

Estas en el tema de Ayuda urgente con codigo para cambiar tamaño de imagen en el foro de PHP en Foros del Web. Hola, necesito resolver urgente esto, espero que me puedan ayudar. Yo tengo un formulario para llenar datos y se puede subir una imagen que tiene ...
  #1 (permalink)  
Antiguo 23/06/2004, 20:45
 
Fecha de Ingreso: agosto-2003
Mensajes: 57
Antigüedad: 20 años, 7 meses
Puntos: 0
Ayuda urgente con codigo para cambiar tamaño de imagen

Hola, necesito resolver urgente esto, espero que me puedan ayudar.
Yo tengo un formulario para llenar datos y se puede subir una imagen que tiene que ser guardada en la base de datos. Con esto no tengo problema, ya que hice lo siguiente y funciona bien:


Código PHP:
$nombre $_FILES[archivo][tmp_name];
if (
$nombre != "")
    {
    
$tamanio=filesize($nombre);
    
$fp=fopen($nombre,"r");
    
$imagen=fread($fp,$tamanio);
    
$imagen=addslashes($imagen);
    }
// despues guardo $imagen en la base de datos 

Ahora, yo antes de guardar la imagen necesito cambiarle el tamaño para guardar todas la imagenes que sean subidas con el mismo tamaño.
Me dijeron que lo podia hacer con el siguiente codigo:


Código PHP:
function resizeImg($s_img$d_img$w_max$h_max)
    {
        
// Guarda los posibles tipos de imagenes en un array ($img_types)
        
static $img_types = array(
            
=> 'Gif'
            
=> 'Jpeg'
            
=> 'Png' 
        
); 
         
        if (
file_exists($s_img))
        {
            
// Obtiene el tipo del fichero 
            
list(,,$type) = getImageSize($s_img);
             
            
// No se reconoce el tipo del fichero 
            
if (!isset($img_types[$type])) { 
                
trigger_error('No se reconoce el tipo de imagen'E_USER_WARNING); 
                return 
false
            } 
             
            
// Se define función que creará la imagen y se comprueba que exista 
            
if (!function_exists($f_create 'imageCreateFrom' $img_types[$type])) {
                
trigger_error("No existe la función '{$f_create}' necesaria para abrir la imagen."E_USER_WARNING); 
                return 
false
            } 
             
            
// Crea la imagen a partir del fichero y comprueba que se haya cargado bien 
            
if (!$img $f_create($s_img)) { 
                
trigger_error("No se pudo abrir el fichero correctamente."E_USER_WARNING); 
                return 
false
            } 

            
// Obtiene el tamaño de la imagen original 
            
list($aw$ah) = array(imageSX($img), imageSY($img)); 
             
            
// Si el ancho o el alto de la imagen es menor o igual a 0 
            
if ($aw <= || $ah <= 0) { 
                
trigger_error("El tamaño de la imagen es incorrecto."E_USER_WARNING); 
                return 
false
            } 
             
            
// Se calcula la proporción de la imagen 
            
if ($aw $ah) { 
                
$nw $w_max
                
$nh = ($nw $aw) * $ah
            } else { 
                
$nh $h_max
                
$nw = ($nh $ah) * $aw
            } 

            
// Si se puede crear la imagen a color verdadero se crea 
            
if (function_exists('imageCreateTrueColor')) { 
                
$img2 imageCreateTrueColor($nw$nh); 
            } else { 
                if (
function_exists('imageCreate')) { 
                    
trigger_error("No existe la función 'imageCreate', no se puede crear la imagen."E_USER_WARNING); 
                    return 
false
                } 
                 
                
$img2 imageCreate($nw$nh); 
            } 
             
            if (!
$img2) { 
                
trigger_error("No se pudo crear la imagen correctamente."E_USER_WARNING); 
                return 
false
            } 

            
// Se intenta usar imageCopyResampled 
            
if (function_exists('imageCopyResampled')) { 
                
imageCopyResampled($img2$img0000$nw$nh$aw$ah); 
            } else { 
                if (
function_exists('imageCopyResized')) { 
                    
trigger_error("No existe la función 'imageCopyResized', no se puede redimensionar la imagen."E_USER_WARNING); 
                    return 
false
                } 
                 
                
imageCopyResized($img2$img0000$nw$nh$aw$ah); 
            } 

            
// Se comprueba que exista la función para guardar la imagen, en caso 
            // contrario se prueban otros formatos. 
            
foreach(array($img_types[$type], 'Jpeg''Png') as $type_t) { 
                if (
function_exists($f_save 'image' $type_t)) { 
                    
// Se guarda la imagen 
                    
if ($f_save($img2$d_img)) return true;                     
                }                 
            } 
             
            
trigger_error("No se pudo guardar la imagen en '{$d_img}'."E_USER_WARNING); 
            return 
false
        } 

        
trigger_error("No existe el fichero '{$s_img}'."E_USER_WARNING);
        return 
false
    } 

El problema es que no se como ni cuando llamar esta funcion, ya que probe llamandola despues del addslashes($imagen), y le mando $imagen y me dice que no existe el fichero..., probé mandandole $imagen pero sin hacerle el addslashes, pero tampoco funcionaba. Quisiera ver si alguien me puede decir en que momento llamar a la funcion, que variable le paso, y si a la imagen que me devuelve le tengo que hacer algo para guardarla en la base de datos o simplemente la gurdo como me la devuelve.
Bueno, agradezco si alguien se tomo el tiempo de leer todo esto. Muchas Gracias!

Germán.
  #2 (permalink)  
Antiguo 24/06/2004, 06:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Las funciones de tratamiento de imagenes (GD) que usas .. necesitan como "parámetro" para trabajar la imagen el archivo en sí desde su ruta física del archivo en tu servidor .. Por ende, si necesitas aplicar esa función -antes- de seguir con tu proceso que guarda tu imagen en tu BD (binario ?) .. tendrás que aplicar esa función antes de tus actuales "fopen()" y demás que haces ahí.

Código PHP:
$nombre $_FILES[archivo][tmp_name]; 
resizeImg($nombre$d_img$w_max$h_max) ; 
El resto de funciones que usas .. tendrán que basarse en lo que generó tu función (un archivo de tal ruta/nombre que indicas en: $d_img).

Código PHP:
$tamanio=filesize($d_img); 
$fp=fopen($d_img,"r"); 
$imagen=fread($fp,$tamanio); 
$imagen=addslashes($d_img); 
A su vez .. ese archivo que se generó . .ya no te hará falta .. así que podrías borrarlo (pues con esas funciones ya lo guardas en tu BD en binario en un campo de esta al parecer):

Código PHP:
unlink($d_img); 
Es más .. habría que modificar más esa función que usas para el "resize" .. pero, no sería necesario ni crear ese archivo .. pues, imagenes que generas con funciones "GD" puedes crearlas sobre una variable, la cual usarías para llevarlo a tu BD directamente sin tener que crear el archivo -> leerlo para llevarlo a una variable y de ahí a tu BD y despues descartar ese proceso intermedio ..

Un saludo,
  #3 (permalink)  
Antiguo 24/06/2004, 10:36
 
Fecha de Ingreso: agosto-2003
Mensajes: 57
Antigüedad: 20 años, 7 meses
Puntos: 0
Bueno, antes que nada gracias por responder.
Mira, hice lo siguiente:

Código PHP:
$nombre=$_FILES[archivo][tmp_name];
resizeImg($nombre,$d_img,316,316); 
y me aparece esto:

Warning: imagejpeg(): Invalid filename '' in C:\Archivos de programa\Apache Group\Apache2\htdocs\german\sioc\funciones.php on line 97

Warning: imagejpeg(): Invalid filename '' in C:\Archivos de programa\Apache Group\Apache2\htdocs\german\sioc\funciones.php on line 97

Warning: imagepng(): Invalid filename '' in C:\Archivos de programa\Apache Group\Apache2\htdocs\german\sioc\funciones.php on line 97

Warning: No se pudo guardar la imagen en ''. in C:\Archivos de programa\Apache Group\Apache2\htdocs\german\sioc\funciones.php on line 101


La linea 97 viene a ser esta:

if ($f_save($img2, $d_img)) return true;


Que es lo que pasa?. Esto me aparece cuando intento subir una imagen jpeg. Pero tambien con gif.

Espero que me puedas ayudar.
  #4 (permalink)  
Antiguo 24/06/2004, 11:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. le distes algún valor a:

$d_img

(esa variable define la ruta y nombre de archivo que se va a crear!)

Un saludo,
  #5 (permalink)  
Antiguo 24/06/2004, 20:16
 
Fecha de Ingreso: agosto-2003
Mensajes: 57
Antigüedad: 20 años, 7 meses
Puntos: 0
No, no le di ningun valor a $d_img. No entiendo que valor le tengo que dar, disculpa pero soy un poco principiante en esto. Me podrias decir que le tengo que pasar exactamente?.
La verdad no entiendo bien que es lo que hace esto:

Código PHP:
foreach(array($img_types[$type], 'Jpeg''Png') as $type_t) { 
                if (
function_exists($f_save 'image' $type_t)) { 
                    
// Se guarda la imagen 
                    
if ($f_save($img2$d_img)) return true;                      
                }                  
            }[ 
Donde guarda $img2 ??

Que pasaria si le saco esta parte y hago que devuelva $img2 ???

Bueno, espero que puedas seguir ayudandome con esto porque realmente es muy importante para mi.

Gracias.

Germán.
  #6 (permalink)  
Antiguo 25/06/2004, 09:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
A la variable:

$d_img

Le tienes que dar un nombre de archivo y ruta (si corresponde) donde quieres que esa función cree su "thumnail" de forma temporal (por qué todo el código está hecho para crear el archivo).

Podría ser:
$d_img="imagenes/".$_FILES['archivo']['tmp_name'];

donde "imagenes" sería un directorio bajo tu script (donde esté)

Un saludo,
  #7 (permalink)  
Antiguo 25/06/2004, 17:20
 
Fecha de Ingreso: agosto-2003
Mensajes: 57
Antigüedad: 20 años, 7 meses
Puntos: 0
Excelente! ahora si entendi y pude hacer que funcione. Muchisimas gracias!!

Germán.
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:25.