Se que este tema es viejo, pero aparece indexado en google, y por tanto cuando algunos buscamos info al respecto, rankea bastante bien.
He usado esta fórmula unas cuantas veces, hasta que me he dado cuenta que tiene una falla (o a lo mejor yo la fallo de algun modo).
He seteado los tamaños máximos para el thumb en 266*183
Es decir, si la imágen es mayor, que escale proporcional, manteniendo como máximos esos parámetros.
Todo funcionaba bien hasta que encuentro una imágen de 1000px * 750px... La fórmula que yo utilizaba, si bien no es esta misma es similar y sigue la misma lógica... Al escalar esa imagen en particular, me ponía el ancho a 266 y el alto a 200
Por tanto no cumplia su funcion...
Esta es la fórmula completa que estaba utilizando:
Código PHP :
$nuevo_ancho = 266;
$nuevo_alto = 183;
if($ancho >= $nuevo_ancho || $alto >= $nuevo_alto){
if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho)){
$nuevo_ancho = round($ancho * $nuevo_alto / $alto) ;
}else{
$nuevo_alto = round($alto * $nuevo_ancho / $ancho);
}
}else{
$nuevo_alto = $alto;
$nuevo_ancho = $ancho;
}
Con esa imágen en particular, y solo con esa me paso que escalaba MAL...
Por tanto le puse manos a la obra, y decidí culminar por esta que hasta ahora me ha funcionado con todos los tamaños que le pase:
Código PHP :
$nuevo_ancho = 266;
$nuevo_alto = 183;
if($alto >= $nuevo_alto || $ancho >= $nuevo_ancho){
$percentAlto = $nuevo_alto/$alto;
$percentAncho = $nuevo_ancho/$ancho;
$escala = min($percentAlto, $percentAncho);
$nuevo_alto = $alto * $escala;
$nuevo_ancho = $ancho * $escala;
}else{
$nuevo_alto = $alto;
$nuevo_ancho = $ancho;
}
Espero que pueda servir a alguien; aún no entiendo bien porque fallaba la anterior con ese tamaño en particular, pero tampoco soy un matemático, y era más facil plantearme hacerla de nuevo que ponerme a hacer calculos para encontrar la falla
Solo aclarar que $alto y $ancho los recibo con getimagesize.
Saludos