Muy buenas. Hace tiempo que utilicé este código para subir imágenes al server (lo encontré aquí en forosdelweb), y funcionaba bien, o al menos eso parecía. El caso es que ahora he descubierto un error que me está quebrando la quijotera. Las imágenes suben, pero al parecer siempre y cuando tengan una resolución menor de 1414x1061 píxeles. Es decir, probando he creado con photoshop una foto de 800x600 píxeles. La sube perfectamente.
He ido probando cambiando resoluciones y por ejemplo, a 1413x1060 sube perfectamente, pero a un píxel más ancho/alto, 1414x1061 ya da un error, y la página se carga a medias. De repente se corta el código y se queda una tabla a medias, incluso antes de llegar al código PHP.
¿Es raro de coj****, o no? Yo ya he probado de todo o casi todo y no logro dar con el error. Posteo el código para ver si algún alma caritativa me echa una manita y salgo adelante.
Código PHP:
$nombrefoto="1";
$dir="casas/".$nombrefoto."/";
$anchura=336;//Para foto grande
$altura=252;
$anchura_thumb=108;//Para foto pequeña
$altura_thumb=81;
$pos="L-T";
$c1=50;//Calidades
$c2=50;
$name=$_FILES["archivo"]['name'];
$type=$_FILES["archivo"]['type'];
$tamano=$_FILES["archivo"]['size'];
$image_name = $name;
$extension = "jpg";
$image_name=$nombrefoto.".".$extension;
if ($type<>"image/pjpeg"){
$resultadoupload="El archivo seleccionado no es una imagen de tipo jpeg.";
}else{
if ($tamano<=2000000){
//Imagen original en el servidor
$temp=$_FILES["archivo"]['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");
}
//INICIA PROCESO
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen
if ($dimensiones[0]>=350){//Si la imagen es mayor o igual a 350 píxeles de ancho
if ($dimensiones[1]>=$dimensiones[0]/2){//Si el alto es mayor o igual al ancho entre 2
if ($dimensiones[1]<$dimensiones[0]){//Si el alto es menor que el ancho (si no es vertical)
$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
fopen($dir.$image_name,'w+');
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"
$image_name2=$image_name;
//Ahora voy con la imagen pequeña
$image_name=$nombrefoto2.".".$extension;
//Imagen original en el servidor
$temp=$_FILES["archivo"]['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");
}
//INICIA PROCESO
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen
$image = imagecreatetruecolor($anchura_thumb,$altura_thumb); //crea la nueva imagen
$FFF = imagecolorallocate($img, 255,255,255);
imagefill($image, 0, 0, $FFF);
imagecopyresampled ($image, $img, 0, 0, 0, 0, $anchura_thumb, $altura_thumb, $dimensiones[0], $dimensiones[1]);//reescala
fopen($dir.$image_name,'w+');
imagejpeg($image,"$dir$image_name", $c2);//mueve la imagen al server (el segundo parámetro es la calidad)
imagedestroy($image); //destruye image
imagedestroy($img); //destruye la imagen "origen"
$unique = time();
$resultadoupload="La imagen se ha subido correctamente.";
}else{
$resultadoupload="No se admiten las imágenes verticales.";
}
}else{
$resultadoupload="El alto de la imagen es inferior a la mitad del ancho, por lo que no guarda relación de aspecto";
}
}else{
$resultadoupload="El ancho de la imagen es menor de 350 píxeles.";
}
}else{
$resultadoupload="El tamaño de la imagen supera el límite permitido (2MB)";
}
}