Escoffie :
El código va mucho mejor. funciona correctamente cuando la imagen original es menor de 250 x 250 o cuando es de tamaño superior a 250 x 250 pero cuadrada.
El problema es cuando la imagen es mayor a 250 x 250 pero de lados distintos (por ejemplo 1024 x 768), lo que hace en este caso es tomar una parte de la foto, osea lo que alcance en 250 x 250 partiendo de la posición 0,0.
Cuando la foto es de 1024x 768 debe hacer lo siguiente:
-Redimensionarla proporcionalmente a 250 x 188
-Incrustarla en otra imagen de 250 x 250 para mantener la uniformidad de las imagenes (mirar el ejemplo en deremate
http://www.deremate.cl/accdb/ViewIte...880397&page=19)
el codigo que estoy utilizando es este. (Se puede copiar y pegar en un php para probar), le saqué la parte del thumbail porque no la necesito utilizar por ahora.
Código PHP:
<?php
################################################## ################################################
# BEGIN imgResample2
# ------------------------------------------------------------------------------------------------
# DESCRIPCIÓN:
# Altera el tamaño de una imagen al subirse desde una forma ajustándola a una altura o anchura máxima,
# preservando las proporciones. Opcionalmnete puede señalarse una imagen PNG para que sirva com marca de agua
# Genera una imagen Thumbnail también.
# Acepta imágenes JPG, GIF o PNG y el resultado del proceso se copia al directorio actual como una imagen
# DEVUELVE:
# Nada
# PARÁMETROS:
# $campo -> string, obligatorio; nombre del campo de tipo File del que tomará los valores de la imagen a procesar
# $dir -> string, opcional; ruta donde se subirá el archivo. Si se deja vacío lo sube al directorio actual
# $anchura -> número, opcional; anchura máxima permitida para las imágenes a fullsize. Valor predeterminado es 250 px
# $anchura_thumb -> número, opcional; anchura máxima permitida para las imágenes thumbnail. Valor predeterminado es 100 px
# $watermark-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el fullsize
# $watermark_thumb-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el thumbnail
# $pos -> string, opcional, predeterminado = "L-T"; posición horizontal de la marca de agua. Valores permitidos: "L" para izquierda o "R" para derecha, "T" para arriba o "B" para abajo. Separar con un - los valores horizontales y verticales
# $wmdist -> número, opcional, predeterminado = 0; padding en pixeles para el Watermark
# $c1 -> número, opcional, predeterminado = 85; calidad del jpg de la imagen grande
# $c2 -> número, opcional, predeterminado = 90; calidad del jpg de la imagen thumbnail
#
# EJEMPLO:
# imgResample2('img1'); // copia la imagen del campo img1 al directorio actual
function imgResample2 ($campo, $dir="img/", $anchura=250, $anchura_thumb=80, $watermark="sello.png", $watermark_thumb="", $pos="L-B", $wmdist=1, $c1=95, $c2=97){
if($_FILES[$campo]['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[$campo]['name'];
$type = $_FILES[$campo]['type'];
$image_name = $name;
//Imagen original en el servidor
$temp = $_FILES[$campo]['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[$campo]['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[$campo]['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);
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen
/*
//INICIA PROCESO
if ($dimensiones[0] == $dimensiones[1]) {
//Este funciona bien para imagenes de mismo alto mismo ancho
$ratio = ($dimensiones[0] / $anchura);
$altura = round($dimensiones[1] / $ratio);
echo $dimensiones[0]."<br>";
echo $dimensiones[1];
$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 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
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen
$anchura=250; //medida en píxeles, aquí pones lo que quieras
$altura = 250; //medida en píxeles, aquí pones lo que quieras
$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]);
// Cambia las proporciones al tamaño especificado
//INICIA PROCESO
$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen
$anchura=250; //medida en píxeles, aquí pones lo que quieras
$altura = 250; //medida en píxeles, aquí pones lo que quieras
$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, $dimensiones[0], $dimensiones[1], $dimensiones[0], $dimensiones[1]);
// Rellena el rectángulo del tamaño especificado con la imagen, sólo será visible lo que quepa de la imagen,
// el relleno empieza desde 0x, 0y (esquina superior izquierda)
//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
}
$unique = time();
$resampled[0] = $dir.$image_name;
$resampled[1] = $dir.$thumb_name;
$resampled[2] = "<img src=\"$dir$image_name?i=$unique\">";
$resampled[3] = "<img src=\"$dir$thumb_name?i=$unique\">";
return $resampled;
}
# END imgResample2
################################################## ################################################
?>