Foros del Web » Programando para Internet » PHP »

Generar, guardar y redireccionar imagen GD

Estas en el tema de Generar, guardar y redireccionar imagen GD en el foro de PHP en Foros del Web. Hola! Les presento mi problema: Los archivos que tengo hasta ahora son: index.php : es el formularo para subir el archivo. sube_archivo.php: obtiene los datos, ...
  #1 (permalink)  
Antiguo 26/12/2009, 08:19
 
Fecha de Ingreso: julio-2009
Mensajes: 15
Antigüedad: 14 años, 9 meses
Puntos: 0
Generar, guardar y redireccionar imagen GD

Hola!
Les presento mi problema:
Los archivos que tengo hasta ahora son:
index.php : es el formularo para subir el archivo.
sube_archivo.php: obtiene los datos, los guarda en la bd y sube la imagen al servidor.

modifica.php
Código PHP:
<?php
    
//Copyright © McAnam.com
    
function iPintaImagenRedimensionada ($sDirImagen$bEscalable$ancho$alto$iTipo){
$sDirImagen="$_GET[nom_dir]";
$bEscalable="0.5";
$ancho="0";
$alto="2";
$iTipo="2";
        
// Cogemos los datos de la imagen
        
$vDatosImg = @getimagesize($sDirImagen);

        if (!
$vDatosImg) return -8;

        
// Recogemos el Tipo Mime
        
if (isset($vDatosImg['mime']))
            
$sTipo $vDatosImg['mime'];
        else if(isset(
$vDatosImg[2]))
            
$sTipo image_type_to_mime_type($vDatosImg[2]);
        else if (isset(
$iTipo))
            
$sTipo image_type_to_mime_type($iTipo);
        else
            return -
10;
        
// Recogemos la imagen a partir de la dirección dada ($sDirImagen)
        
switch($vDatosImg[2]){
            case 
IMAGETYPE_GIF:
                
$imgOrigen imagecreatefromgif($sDirImagen);
                break;
            case 
IMAGETYPE_JPEG:
                
$imgOrigen imagecreatefromjpeg($sDirImagen);
                break;
            case 
IMAGETYPE_PNG:
                
$imgOrigen imagecreatefrompng($sDirImagen);
                break;
            case 
IMAGETYPE_SWF:
            case 
IMAGETYPE_PSD:
            case 
IMAGETYPE_BMP:
            case 
IMAGETYPE_TIFF_II:
            case 
IMAGETYPE_TIFF_MM:
            case 
IMAGETYPE_JPC:
            case 
IMAGETYPE_JP2:
            case 
IMAGETYPE_JPX:
            case 
IMAGETYPE_JB2:
            case 
IMAGETYPE_SWC:
            case 
IMAGETYPE_IFF:
                return -
11;
                break;
            case 
IMAGETYPE_WBMP:
                
$imgOrigen imagecreatefromwbmp($sDirImagen);
                break;
            case 
IMAGETYPE_XBM:
                
$imgOrigen imagecreatefromxbm($sDirImagen);
                break;
            default:
                return -
13;
                break;
        }

        
/*
            Establecemos los tamaños:
                - Si bEscalable viene como true.
                 Se multiplican los valores recibidos para ancho y alto
                 por el ancho y alto de la imagen,
                 así 0.5 sería la mitad de la imagen y 2 sería el doble
                - Si bEscalable viene como false.
                 Los tamaños serán los pasados por ancho y alto directamente
                - Si ancho o alto vienen como 0 o numero negativo,
                 el valor de esta propiedad será asignada proporcionalmente con
                 el valor de la otra.
                - Si ancho y alto vienen como 0 o numero negativo, Error
        */

        
if (!(is_numeric($ancho)) || !(is_numeric($alto))) return -20;

        if (
$bEscalable){
            if (
$ancho 0){
                
$ancho *= $vDatosImg[0];
                if (
$alto 0$alto *= $vDatosImg[1];
                else 
$alto $vDatosImg[1] * ($ancho $vDatosImg[0]);
            }else if (
$alto 0){
                
$alto *= $vDatosImg[1];
                
$ancho $vDatosImg[0] * ($alto $vDatosImg[1]);
            }else{
                return -
21;    
            }
        }else{
            if ((
$ancho 0) && ($alto 1))
                
$alto $vDatosImg[1] * ($ancho $vDatosImg[0]);
            else if ((
$alto 0) && ($ancho 1))
                
$ancho $vDatosImg[0] * ($alto $vDatosImg[1]);
            else if ((
$alto 1) && ($ancho 1))
                return -
21;    

        }

        
// Se crea la nueva imagen redimensionada
        
if (function_exists("ImageCreateTrueColor"))
            
$imgDestino ImageCreateTrueColor($ancho,$alto);
        else
            
$imgDestino ImageCreate($ancho,$alto);

        
ImageCopyResized ($imgDestino$imgOrigen0000$ancho$alto$vDatosImg[0], $vDatosImg[1]);

        
/*
            Se envía la cabecera de los datos de la imagen.
            Cuando llegue aquí no debe de haber sido enviado NADA.
            Si se ha enviado algo, aunque fuera un "intro" o espacio daría error
        */
        
header("Content-type: ".$sTipo);

        
// Se pinta la imagen según el tipo
        
switch($vDatosImg[2]){
            case 
IMAGETYPE_GIF:
                
imagegif($imgDestino);
                break;
            case 
IMAGETYPE_JPEG:
                
imagejpeg($imgDestino$save_view);
                break;
            case 
IMAGETYPE_PNG:
                
imagepng($imgDestino);
                break;
            case 
IMAGETYPE_SWF:
            case 
IMAGETYPE_PSD:
            case 
IMAGETYPE_BMP:
            case 
IMAGETYPE_TIFF_II:
            case 
IMAGETYPE_TIFF_MM:
            case 
IMAGETYPE_JPC:
            case 
IMAGETYPE_JP2:
            case 
IMAGETYPE_JPX:
            case 
IMAGETYPE_JB2:
            case 
IMAGETYPE_SWC:
            case 
IMAGETYPE_IFF:
                return -
12;
                break;
            case 
IMAGETYPE_WBMP:
                
imagewbmp($imgDestino);
                break;
            case 
IMAGETYPE_XBM:
                
imagexbm($imgDestino);
                break;
            default:
                return -
13;
                break;
        }

        
imagedestroy($imgOrigen);
        
imagedestroy($imgDestino);

        return 
1;

    }

    function 
ErrorPintaImagenRedimensionada($iRetorno){

        
$sTexto1 "";
        
$sTexto2 "";

        switch(
$iRetorno){
            case -
8:
                
$sTexto1 "La dirección de la imagen dada no es válida";
                break;
            case -
10:
                
$sTexto1 "No se ha encontrado el tipo mime de la imagen";
                
$sTexto2 "ni en sus cabeceras ni pasadas por parámetro";
                break;
            case -
11:
                
$sTexto1 "El tipo de la imagen dado no se puede redimensionar";
                
$sTexto2 "Se recomiendan los tipos jpg, gif ó png";
                break;
            case -
12:
                
$sTexto1 "No es posible crear una imagen con el tipo dado";
                
$sTexto2 "Se recomiendan los tipos jpg, gif ó png";
                break;
            case -
13:
                
$sTexto1 "El tipo mime no esta implementado";
                
$sTexto2 "Se recomiendan los tipos jpg, gif ó png";
                break;
            case -
20:
                
$sTexto1 "Error en los parámetros pasados ancho (3º) ó alto(4º)";
                
$sTexto2 "Los valores deben ser numéricos enteros o decimales";
                break;
            case -
21:
                
$sTexto1 "Error en los parámetros pasados ancho (3º) y alto(4º)";
                
$sTexto2 "al menos uno de estos parámetros deben de ser positivos";
                break;
            default:
                if (
$iRetorno 0$sTexto1 "Error desconocido";
                break;
        }

        if (
$sTexto1 != ""){
            
$imagen imagecreate (40040);
            
$cFondo imagecolorallocate ($imagen255226169);
            
$cTexto imagecolorallocate ($imagen1531020);
            
imagefilledrectangle ($imagen0015030$cFondo);
            if (
$sTexto2 == ""){
                
imagestring ($imagen3515$sTexto1$cTexto);
            }else{
                
imagestring ($imagen355$sTexto1$cTexto);
                
imagestring ($imagen3520$sTexto2$cTexto);
            }

            
header("Content-type: image/png");
            
imagepng($imagen);
            
imagedestroy($imagen);
        }

    }

    
    
$iError iPintaImagenRedimensionada("imagen.jpg"TRUE0.5, -1IMAGETYPE_JPEG);
    
ErrorPintaImagenRedimensionada ($iError)

?>
Mi problema es que no logro mostrar el archivo creado en modifica.
He probado cambiar el imagejpeg poniendo la nueva direccion, se guardaba pero no me mostraba la imágen guarda.
Tambien probé usar move_upload_files pero al no haber enviado ningun formulario me daba error.
Traté de colocar cambiar el header("Content-type: ".$sTipo); por header('Location: index.php'); pero redireccionaba antes de crear y guardar la imágen. ¿como hago? Agradeceria la ayuda de cualquiera.
  #2 (permalink)  
Antiguo 26/12/2009, 08:47
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Generar, guardar y redireccionar imagen GD

Pero te tira un error? Ves algo? O solo te tira un choclo de numeros???

Para que el interprete te reconozca que es una imagen deberias poner algo asi como

Código PHP:
Ver original
  1. header("Content-type: image/jpg");
__________________
HV Studio
Diseño y desarrollo web
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 20:40.