Rutarelativa

Publicidad

Anotaciones reducidas

  • La vida en un día: Película de un día en la Tierra La vida en un día: Película de un día en la Tierra

    La vida en un día -Life in a day- es una película hecha por los propios usuarios de Youtube, que durante el día 24 de Julio del 2010 grabaron las cosas que pasaban en su vida durante ese día, y el director Kevin McDonald ha reunido en forma de película de un día en la Tierra.

    De una hora y media de duración, veremos todo tipo de escenas en todas las partes del mundo, con una emotiva visión del mundo real tanto con sus cosas bellas y buenas, como con la más cruda visión del ser humano y su realidad.

    [La vida en un día: Película de un día en la Tierra]

  • Video: Las posibilidades de Kinect Video: Las posibilidades de Kinect

    Cuando oímos hablar de Kinect, no podemos evitar pensar en un "simple" aparato de detección de movimientos para videojuegos, y en cierto modo es así.

    Lo bueno es que Microsoft ha lanzado una SDK de Kinect para que los usuarios puedan crear aplicaciones que exploten las capacidades del dispositivo, dando lugar a miles de ideas.

    El siguiente video es al fin y al cabo con fines publicitarios, pero nos da que pensar acerca de las aún sin explotar posibilidades de Kinect. Disfrutadlo.

    [Video: Las posibilidades de Kinect]

  • La historia de los Exploradores Web La historia de los Exploradores Web

    Desde prácticamente los comienzos de Internet los Exploradores Web o Navegadores web nos han acompañado, haciendo las veces de herramientas indispensables para una navegación que a cada año que pasa se hace más cómoda y más intuitiva.

    En Testking encuentro una imágen que contiene un gran esquema de la historia de los Exploradores Web desde el primer Nescape en 1994 hasta los navegadores modernos de este año 2011.

    Una imágen interesante para conocer cuál ha sido la evolución en éste área.

    [La historia de los Exploradores Web]

Últimos comentarios

  • Avatar del usuario Vioscar Vioscar Funciona perfecto... pero estoy en linux y al hacer el upload no...
  • Avatar del usuario Daily Punk Daily Punk Muchas gracias por el artículo. Lo que no entiendo es por qué,...
  • Avatar del usuario Barbara Barbara mmm Bueno, estoy desde un netbook, y no me aparece eso de Cambiar...
  • Avatar del usuario Laura Hernández Laura Hernández Está muy bien, pero podrías actualizar el código a la nueva...
  • Avatar del usuario hector jose hector jose buenas noches quisiera saber como se escribe mi nombre en chino
  • Avatar del usuario rdms rdms exelente aporte hermano me fue de mucha ayuda me salvaste la patria XD
  • Avatar del usuario nuria nuria Hola , lo primero decirte GRACIAS, llevo toda la mañana buscando...
  • Avatar del usuario andres andres interesante el trabajo con archivos en conjunto con ftp
  • Avatar del usuario Ricardo Ricardo Me sirvió mucho esta información. Era justo lo que estaba...
  • Avatar del usuario Marysol Chávez Gómez Marysol Chávez Gómez ¿Como puedo ABRIR un mensaje de We Transfer que recivi por mi...

Fans en Facebook de Ruta Relativa

Lo más comentado

Lo más visto

Post al azar

Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

(2)
19 / Mayo / 2011
Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

El tratamiento de imágenes es algo que, tarde o temprano, los que desarrollamos páginas web tenemos que afrontar. En este caso vamos a proponeros una función que he desarrollado personalmente para redimensionar imágenes proporcionalmente y con tamaño fijo en PHP, más concretamente para crear thumbnails de imágenes de dimensiones proporcionales y pudiendo especificar un tamaño fijo.

Antes de mostrar el código para redimensionar imágenes proporcionalmente y con tamaño fijo en PHP, vamos a intentar explicar en qué consiste: En primer lugar tenemos una imágen de unas dimensiones cualquieras, en nuestro caso de 560x560px.

Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

Ejemplo de imágen a redimensionar.

Pongámonos en el caso de que queremos crear un thumbnail de dicha imágen con unas dimensiones fijas de 160x100px. Nos sería imposible en principio redimensionarla de forma proporcional ya que las imagen original y el thumbnail tienen proporciones diferentes, con lo que u obtendríamos una imágen a 160x160px ó a 100x100px para que sea de tamaño proporcional.

Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

Ejemplo de dos imágenes proporcionales.

En este caso, si queremos que la imágen final tenga un tamaño fijo lo ideal sería que el tamaño restante sea rellenado por un marco de color transparente. En este caso cogeríamos la imágen de 100x100px y le añadiríamos un marco a ambos lados de 30px en cada lado.

Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

Ejemplo de imágen proporcional con tamaño fijo.

Una vez explicado este punto, pasamos a mostraros la función y a detallarla:

Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

function createThumb($sImagen, $nWidth = false, $nHeight = false)
{
    // Variables
    $sNombre = null;
    $sPath = null;
    $sExt = null;
    $aImage = null;
    $aThumb = null;
    $aImageMarco = null;
    $ImTransparente = null;
    $aSize = null;
    $nWidthMarco = false;
    $nWidthHeight = false;
    $nX = false;
    $nY = false;

    // Obtenemos el nombre de la imagen
    $sNombre = basename( $sImagen );
    // Obtenemos la ruta especificada para buscar la imagen
    $sPath = dirname( $sImagen ) . '/';
    // Obtenemos la extension de la imagen
    $sExt = mime_content_type( $sImagen );

    // Creamos el directorio thumbs
    if( ! is_dir( $sPath . 'thumbs/' ) )
        @mkdir( $sPath . 'thumbs/', 0777, true ) or die( 'No se ha podido crear el directorio "' . $sPath . 'thumbs/".' );

    // Creamos la imagen a partir del tipo
    switch( $sExt )
    {
        // Imagen JPG
        case 'image/jpeg':
            $aImage = @imageCreateFromJpeg( $sImagen );
            break;
        // Imagen GIF
        case 'image/gif':
            $aImage = @imageCreateFromGif( $sImagen );
            break;
        // Imagen PNG
        case 'image/png':
            $aImage = @imageCreateFromPng( $sImagen );
            break;
        // Imagen BMP
        case 'image/wbmp':
            $aImage = @imageCreateFromWbmp( $sImagen );
            break;
        default:
            return 'No se conoce el tipo de imagen enviado, por favor cambie el formato. Sólo se permiten imágenes *.jpg, *.gif, *.png ó *.bmp.';
            break;
    }

    // Obtenemos el tamaño de la imagen original
    $aSize = getImageSize( $sImagen );

    // Calculamos las proporciones de la imagen //

    // Obteniendo el alto (Recogiendo ancho y no alto)
    if( $nWidth !== false && $nHeight === false )
        $nHeight = round( ( $aSize[1] * $nWidth ) / $aSize[0] );
    // Obteniendo el ancho (Recogiendo alto y no ancho)
    elseif( $nWidth === false && $nHeight !== false )
        $nWidth = round( ( $aSize[0] * $nHeight ) / $aSize[1] );
    // Obteniendo proporciones (Recogiendo alto y ancho)
    elseif( $nWidth !== false && $nHeight !== false )
    {
        // Guardamos las dimensiones del marco
        $nWidthMarco = $nWidth;
        $nHeightMarco = $nHeight;

        // Si el ancho es mayor
        if( $nWidth < $nHeight )
        {
            $nHeight = round( ( $aSize[1] * $nWidth ) / $aSize[0] );
            $nX = 0;
            $nY = round( ( $nHeightMarco - $nHeight ) / 2 );
        }
        // Si el alto es mayor
        elseif( $nHeight < $nWidth )
        {
            $nWidth = round( ( $aSize[0] * $nHeight ) / $aSize[1] );
            $nX = round( ( $nWidthMarco - $nWidth ) / 2 );;
            $nY = 0;
        }
    }
    // El ancho y el alto no se han enviado, informamos del error
    elseif( $nWidth === false && $nHeight === false )
        return 'No se ha especificado ningún valor para el ancho y el alto de la imágen.';

    // La nueva imagen reescalada
    $aThumb = imageCreateTrueColor( $nWidth, $nHeight );

    // Reescalamos
    imageCopyResampled( $aThumb, $aImage, 0, 0, 0, 0, $nWidth, $nHeight, $aSize[0], $aSize[1] );

    // Si tenemos que crear el marco
    if( $nWidthMarco !== false && $nHeightMarco !== false )
    {
        // El marco
        $aImageMarco = imageCreateTrueColor( $nWidthMarco, $nHeightMarco );

        // Establecemos la imagen de fondo transparente
        imageAlphaBlending( $aImageMarco, false );
        imageSaveAlpha( $aImageMarco, true );

        // Establecemos el color transparente (negro)
        $ImTransparente = imageColorAllocateAlpha( $aImageMarco, 0, 0, 0, 0xff/2 );

        // Ponemos el fondo transparente
        imageFilledRectangle( $aImageMarco, 0, 0, $nWidthMarco, $nHeightMarco, $ImTransparente );

        // Combinamos las imagenes
        imageCopyResampled( $aImageMarco, $aThumb, $nX, $nY, 0, 0, $nWidth, $nHeight, $nWidth, $nHeight );

        // Cambiamos la instancia
        $aThumb = $aImageMarco;
    }

    // Salvamos
    imagePng( $aThumb, $sPath . 'thumbs/' . $sNombre );

    // Liberamos
    imageDestroy( $aImage );
    imageDestroy( $aThumb );

    return true;
}

La función puede recibir tres parámetros, siendo el primero la ruta de la imágen a redimensionar, el segundo sería el ancho que queremos darle y el tercero el alto. Si especificamos ambos parámetros, ancho y alto, la imágen se redimensionará a dicho tamaño fijo dándole un marco transparente. Si especificamos solo el ancho tendremos una imágen proporcional con respecto al ancho, en nuestro caso si especificamos que la imagen de 560x560px la queremos con un ancho de 160px, el resultado final tendrá unas dimensiones de 160x160px. De igual forma con el alto, si especificamos para la imágen de 560x560px un alto de 100px, el resultado final tendrá unas dimensiones de 100x100px. También cabe destacar que se creará automáticamente un directorio llamado “thumbs” y ahí se almacenarán las imágenes resultantes. Siéntete libre de cambiar el código a tu gusto.

Cualquier error o sugerencia en el código será bien recibida en los comentarios.

votar

Artículos relacionados

Sobre sergiocius

515

Soy un desarrollador en entornos web y escritorio, entusiasta y amante de mi trabajo del que cada día espero aprender algo nuevo. Tengo una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y actualmente curso el primer año de Carrera Universitaria con el poco tiempo que me deja el trabajo. Fundé rutarelativa porque quiero que mi esfuerzo y tiempo invertidos en aprender y poner en práctica algo le resulte útil y fácil a otro usuario, del mismo modo que yo aprendo y ahorro tiempo con la ayuda de los demás.

Sigue a Ruta Relativa

Trackback en Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

Hasta el momento el artículo Redimensionar imágen proporcionalmente y con tamaño fijo en PHP no tiene Trackbacks.

Comentarios en Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

1
Avatar del usuario julian

no guarda nada. de hecho mi PHP dice que no esta definida la función: mime_content_type

Debe ser porque es PHP5.2 y ya esa función fue descontinuada

http://co.php.net/manual/es/function.mime-content-type.php

De otro lado no tengo claro como usar la función createThumb();

supongo que así:

$mifoto=”paisaje.jpg”;
createThumb($mifoto, 100, 100);

No se si eso es correcto.

julian 08/06/2011 20:24:32
2
Avatar del usuario alfonso

no funciona el script, por favor revisar-ho gracias.

alfonso 09/05/2012 11:57:00

Escribir comentario en Redimensionar imágen proporcionalmente y con tamaño fijo en PHP

¡Tu opinión nos interesa!. Escribe tu opinión lo más clara posible para que todos podamos entenderla, evita el spam, comentarios ofensivos, etc. ya que serán eliminados. Tu opinión sera moderada antes de ser publicada, por lo que su aparición en la web puede tardar unos minutos. Si deseáis ponerse en contacto para sugerencias o críticas podéis hacerlo desde el formulario de contacto.

Sigue a rutarelativa en twitter
Editores de Ruta Relativa
Avatar del editor KeLDroX KeLDroX Desarrollador en entornos web y Diseñador de profesión, muy activo, que busca siempre enfrentarse a retos cada vez más dificiles. Si un día no hago algo nuevo o no he superado alguna dificultad para mi es un día vacío. Cuento con dos titulaciones: Técnico en Explotación de Sistemas Informáticos y Técnico Superior en Desarrollo de Aplicaciones Informáticas. Fundé rutarelativa porque siempre quise tener un sitio en donde compartir mis experiencias profesionales y a los problemas que me enfrento día a día en el ámbito profesional.
Avatar del editor sergiocius sergiocius Soy un desarrollador en entornos web y escritorio, entusiasta y amante de mi trabajo del que cada día espero aprender algo nuevo. Tengo una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y actualmente curso el primer año de Carrera Universitaria con el poco tiempo que me deja el trabajo. Fundé rutarelativa porque quiero que mi esfuerzo y tiempo invertidos en aprender y poner en práctica algo le resulte útil y fácil a otro usuario, del mismo modo que yo aprendo y ahorro tiempo con la ayuda de los demás.
Avatar del editor Victor Victor Desarrollador de aplicaciones informáticas con altos objetivos y ambiciones. Busco cada día aprender algo nuevo, ya que mi mundo se encuentra en constante actualización. Cuento con una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y una larga experiencia profesional.