Resizeador de imagenes (II)

calendario27/03/2005reloj18:24calendarioCategorías: PHP

Como ya sabéis, ando haciendo una galería para otra web, por lo que me hice una función para cambiar el tamaño fácilmente, y he pensado en compartirla, porque fijo que a alguno os viene bien...

< ?
function resizear_imagen ($imagen,$img_anch_max,$img_alto_max){
    $extension = explode(".",imagen);
    $num = count($extension)-1;
    $extension = $extension[$num];
    $extension = strtolower($extension);
    switch ($extension){
        case "jpg": if (ImageCreateFromJpeg($imagen)) { $img = ImageCreateFromJpeg($imagen); } else { $errores = "Si"; } break;
        case "jpeg": if (ImageCreateFromJpeg($imagen)) { $img = ImageCreateFromJpeg($imagen); } else { $errores = "Si"; } break;
        case "gif": if (ImageCreateFromGif($imagen)) { $img = ImageCreateFromGif($imagen); } else { $errores = "Si"; } break;
        case "png": if (ImageCreateFromPng($imagen)) { $img = ImageCreateFromPng($imagen); } else { $errores = "Si"; } break;
    }
    //CALCULO LAS PROPORCIONES    
    $prop_imagen = getimagesize($imagen);
    $ancho = $prop_imagen[0];
    $alto = $prop_imagen[1];
    if ($ancho >= $alto){
        $proporcion = $ancho/$alto;
        $ancho_dev = $img_anch_max;
        $alto_dev = $ancho_dev/$proporcion;
        if ($alto_dev > $img_alto_max){
            $alto_dev = $img_alto_max;
            $ancho_dev = $alto_dev * $proporcion;
        }
    } else {
        $proporcion = $alto/$ancho;
        $alto_dev = $img_alto_max;
        $ancho_dev = $alto_dev/$proporcion;
        if ($ancho_dev > $img_anch_max){
            $ancho_dev = $img_anch_max;
            $alto_dev = $ancho_dev * $proporcion;
        }
    }
    //CREO LA IMAGEN DEVUELTA
    $image = imagecreatetruecolor($ancho_dev, $alto_dev);
    ImageCopyResized($image, $img, 0, 0, 0, 0, $ancho_dev, $alto_dev, $ancho, $alto);
    if ($errores == "Si"){
        return "";
    } else{
        return $image;
    }
}
?>

Espero comentarios y demás :)

7 comentarios

  1. xergio — 27 marzo 2005 17:52

    Ya te enseñé mi código ;)

  2. Martín — 27 marzo 2005 20:21

    Si se copia y se pega tal cual, no funcionará. Wordpress cambia las comillas dobles normales por unas torcidas. Creo que se me entiende, ¿no? xD

  3. PaToRoCo — 28 marzo 2005 00:32

    Creo que no es wordpress, que es el blockquote,no?
    De todos modos, estaría bien que la gente tratase de entenderlo en lugar de limitarse a copiar y pegar código :D

  4. IoZ — 28 marzo 2005 14:14

    Algunas cosas que mejoraría:

    1) Para obtener la extensión basta con:
    $extension = array_pop(explode(".",$imagen));

    2) Los "case" los puedes optimizar un poco, te pongo el ejemplo de como seria el del JPG:
    case “jpgâ€?: if (!($img = ImageCreateFromJpeg($imagen))) { $errores = “Siâ€?; } break;
    Así te ahorras el llamar dos veces a la misma función.

    Salu2

  5. xlony — 1 abril 2005 13:00

    y si el archivo contiene puntos? (lala.lala.gif), no funcionaría.

    si no recuerdo mal hay una función en php que hace una especie de explode pero de atrás hacia delante, busca :>

  6. xlony — 1 abril 2005 13:07

    bueno, con array_pop no fallaría.

    (no sabía que hacía array_pop :D).

  7. freddy — 7 junio 2005 20:07

    saludos,

    1.siempre subo fotos , y antes lo debo de redimensionar a parametros definidos (ejem: 250 px de ancho, 300 px de alto)
    2. cuando encuentro fotos de 450 px ancho y 490 px de alto, tengo que redimensionar pero en base a un lado (ejem: ancho)
    y obtendra algo asi como:
    250 px de ancho y 280 px de alto.

    1.como podria aplicar tu script
    2.donde coloco los parametros fijos
    3.en tu script esta considerado solo referenciar a un solo lado, porque si no es asi, la imagen se distorsionaria?

    freddy

Los comentarios están cerrados.