Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/04/2010, 09:52
Avatar de jpvilar
jpvilar
 
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 21 años, 7 meses
Puntos: 1
Upload de imágenes en negro en FF y Chrome

Hola, tengo un script en php que cuando subo una imagen al servidor la resamplea (además de embeberle un watermak) que uso habitualmente pero me encontré con el problema que al cargar la imagen desde FF o Chrome la imagen creada es negra, no sucede lo mismo en IE.

El proceso de subida de la imagen y del thumbnail lo hace perfecto, simplemente cuando subo desde IE no hay drama pero desde otros navegadores me crea en el servidor una imagen totalmente negra.

Pego el script a ver si alguien me da una mano y me explica porqué hace esto, yo siempre supuse que al correr la aplicación en el servidor es independiente del navegador usado pero por algún raro motivo no puedo subir imágenes desde estos dos navegadores (no probé en otros, normalmente trabajo para IE y testeo en FF y Chrome)

Gracias desde ya
Código PHP:
// RESAMPLEO DE IMAGEN
################################################################################################## 
$campo = $_FILES["imagen"];

//function imgResample2 ($imagen, $dir="../../images/albumes/", $anchura, $anchura_thumb, $watermark="", $watermark_thumb="", $pos="L-T", $wmdist=0, $c1=95, $c2=97){ 
$dir="../images/user-imagenes/";
$watermark="../images/logo-watermark.png";
$watermark_thumb="";
$pos="R-T";
$wmdist=5;
$c1=95;
$c2=97;
$anchura = 500;
$anchura_thumb = 200;
$dir_bd = "images/user-imagenes";
$unique = time();
    if(
$_FILES["imagen"]['name']!=''){ 
     
    
//Si el campo está lleno, es decir, si se subió una foto... 

        //crea los directorios necesarios 
        
if($dir!=""){ 
            if(!
file_exists($dir)) mkdir($dir); 
        } 
        
//asigna las variables         
        
$name=$_FILES["imagen"]['name']; 
        
$type=$_FILES["imagen"]['type']; 
        
$image_name = $unique.".jpg"; 
         
        
//Imagen original en el servidor 
        
$temp=$_FILES["imagen"]['tmp_name'];  
         
        
//Objeto con el que trabajará el programa 
        
if($type=="image/pjpeg"){ 
            
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n");  
        } 
        if(
$_FILES["imagen"]['type']=="image/gif"){ 
            
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            
$image_name = str_replace(".gif", ".jpg", $image_name); 
        } 
        if(
$_FILES["imagen"]['type']=="image/x-png"){ 
            
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            
$image_name = str_replace(".png", ".jpg", $image_name); 
        } 
        
//Para que acepte la transparencia del PNG 
        
imagealphablending($img, true); 
        
//INICIA PROCESO 
            
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen 
            
$ratio = ($dimensiones[0] / $anchura); 
            
$altura = round($dimensiones[1] / $ratio); 
            
$image = imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
            
$FFF = imagecolorallocate($img, 255,255,255); 
            
imagefill($image, 0, 0, $FFF); 
            
imagecopyresampled ($image, $img, 0, 0, 0, 0, $anchura, $altura, $dimensiones[0], $dimensiones[1]);//reescala 
             
            //INICIA WATERMARK 
            //posición horizontal y vertical del watermark: 
            
$pos = explode("-",$pos); 
            
$wmhorz=$pos[0]; 
            
$wmvert=$pos[1]; 
         
            if(
$watermark != ''){ 
                
$logo = imagecreatefrompng($watermark); 
                
$margen = $wmdist; //distancia entre el watermark y la orilla 
                
$logoW =imagesx($logo); //Anchura del logo 
                
$logoH =imagesy($logo); //Altura del logo 
                
switch ($wmhorz){ 
                    case 
"L": 
                        
$xpos=$margen; 
                        break; 
//end L 
                    
case "R": 
                        
$xpos=$anchura-$logoW-$margen; //posición en x del wm 
                        
break; //end R 
                
} //end switch hotz 
                
switch ($wmvert){ 
                    case 
"T": 
                        
$ypos=$margen;  
                        break; 
//end T 
                    
case "B": 
                        
$ypos=$altura-$logoH-$margen; //posición en y del wm 
                        
break; //end B 
                
} //end switch vert 
                
imagecopy($image, $logo, $xpos, $ypos, 0, 0, $logoW, $logoH); //Pone el logo 
                
imagedestroy($logo); //destruye el logo después de usarlo 
            
} 
            
//TERMINA WATERMARK 
            
imagejpeg($image,"$dir$image_name", $c1);//mueve la imagen al server (el segundo parámetro es la calidad) 
            
imagedestroy($image); //destruye image 
            
imagedestroy($img); //destruye la imagen "origen" 
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////
        //TERMINA IMAGEN 
         
        //INICIA THUMBNAIL 
        
if($anchura_thumb != 0 || $anchura_thumb == $anchura || $anchura_thumb == "" || $anchura_thumb == NULL) { 
            
//crea los directorios necesarios 
            
$subdir = "thumb"; 
            if(
$dir!=""){ 
                if(!
file_exists($dir.$subdir)) mkdir($dir.$subdir); 
            } else { 
                if(!
file_exists($subdir)) mkdir($subdir); 
            } 
            
//asigna las variables         
            
$name=$_FILES["imagen"]['name']; 
            
$type=$_FILES["imagen"]['type']; 
            
$thumb_name = $subdir."/thumb_".$unique.".jpg"; 
             
            
//Imagen original en el servidor 
            
$temp=$_FILES["imagen"]['tmp_name'];  
             
            
//Objeto con el que trabajará el programa 
            
if($type=="image/pjpeg"){ 
                
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n");  
            } 
            if(
$_FILES["imagen"]['type']=="image/gif"){ 
                
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
                
$thumb_name = str_replace(".gif", ".jpg", $thumb_name); 
            } 
            if(
$_FILES["imagen"]['type']=="image/x-png"){ 
                
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
                
$thumb_name = str_replace(".png", ".jpg", $thumb_name); 
            } 
            
//Para que acepte la transparencia del PNG 
            
imagealphablending($img, true); 
            
//INICIA PROCESO 
                
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen 
                
$ratio_thumb = ($dimensiones[0] / $anchura_thumb); 
                
$altura_thumb = round($dimensiones[1] / $ratio_thumb); 
                
$thumb = imagecreatetruecolor($anchura_thumb,$altura_thumb); //crea la nueva imagen 
                
$FFF = imagecolorallocate($img, 255,255,255); 
                
imagefill($thumb, 0, 0, $FFF); 
                
imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura_thumb, $altura_thumb, $dimensiones[0], $dimensiones[1]);//reescala el thumbnail 
                //INICIA WATERMARK THUMB 
                
if($watermark_thumb != ''){ 
                    
$logo_thumb = imagecreatefrompng($watermark_thumb); 
                    
$margen = $wmdist; //distancia entre el watermark y la orilla 
                    
$logoW_thumb =imagesx($logo_thumb); //Anchura del logo 
                    
$logoH_thumb =imagesy($logo_thumb); //Altura del logo 
                    
switch ($wmhorz){ 
                        case 
"L": 
                            
$xposThumb=$margen/2; 
                            break; 
//end L 
                        
case "R": 
                            
$xposThumb=$anchura_thumb-$logoW_thumb-($margen/2); //posición en x del wm 
                            
break; //end R 
                    
} //end switch hotz 
                    
switch ($wmvert){ 
                        case 
"T": 
                            
$yposThumb=$margen/2; 
                            break; 
//end T 
                        
case "B": 
                            
$yposThumb=$altura_thumb-$logoH_thumb-($margen/2); //posición en y del wm 
                            
break; //end B 
                    
} //end switch vert 
                    
imagecopy($thumb, $logo_thumb, $xposThumb, $yposThumb, 0, 0, $logoW_thumb, $logoH_thumb); //Pone el logo 
                    
imagedestroy($logo_thumb); //destruye el logo después de usarlo 
                
} 
                
//TERMINA WATERMARK THUMB 
                
imagejpeg($thumb,"$dir$thumb_name", $c2);//mueve la imagen al server (el segundo parámetro es la calidad) 
                
imagedestroy($thumb); //destruye thumb 
                
imagedestroy($img); //destruye la imagen "origen" 
                 
            
} else { 
             
                
$thumb_name = $unique."_".$image_name; 
             
            } 
// end if != 0 
             
        //TERMINA THUMBNAIL 
    
} 
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE