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
}