PHP: Como gerar thumbs de imagens

Palavras-chave: PHP, thumbnail, Imagens, GD

A grande maioria dos sites precisa gerar algum tipo de thumbnail ou pré-visualização em miniatura a partir de uma foto submetida ou de uma screenshot.

Abaixo segue uma pequena função em PHP que recebe uma imagem e gera outra, com a nova largura especificada, a altura é automaticamente calculada para manter a proporção em relação à imagem original. A imagem é redimensionada mantendo-se a qualidade de 100% (válido especialmente para o formato JPEG).

/*
 * Método geraThumb
 * Gera thumbnail a partir da foto
 */
function geraThumb($photo, $output, $new_width)
{
    $source = imagecreatefromstring(file_get_contents($photo));
    list($width, $height) = getimagesize($photo);
    if ($width>$new_width)
    {
        $new_height = ($new_width/$width) * $height;
        $thumb = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($thumb, $source, 0, 0, 0, 0,
            $new_width, $new_height, $width, $height);
        imagejpeg($thumb, $output, 100);
    }
    else
    {
        copy($photo, $output);
    }
}
?>
This entry was posted in PHP. Bookmark the permalink.

12 Responses to PHP: Como gerar thumbs de imagens

  1. Guilherme says:

    O único problema é que esse script usa gobs de RAM. $source é uma versão descomprimida da imagem, e $thumb é outra imagem descomprimida. Então se você está tratando uma imagem de 6 megapixels truecolor vai gastar algo como 22MB mais o tamanho do thumbnail.

    O PHP não libera memória de volta para o sistema depois que termina a execução do script, então depois de várias execuções você vai ficar com um monte de processos httpd bem gordos. Uma alternativa, se você usa o Apache, é chamar apache_child_terminate(), que vai forçar o httpd a se encerrar quando acabar de processar o request atual.

  2. Thiago Bernabé says:

    Como fez para manter a proporsão ?
    Desculpe a ignorancia mais não entendi …

    Um vez precisei de fazer isso e criei uma função que faz o MDC das dimensões da foto, pra quem não se lembra, MDC é o minimo divisor comum, posso compartilhar-la com voces so que não a tenho no trabalho, so em casa

    Obrigado e até a proxima :)

  3. Jonatas says:

    Na Realidade MDC = Máximo divisor comum.. MMC = Mínimo multíplo comum.

    O Brasil precisa de educação…..

  4. Eliseusb says:

    oi, e como se usa ae isso na prática, dá um exemplo por gentileza, sou novato em php

  5. Eliseusb says:

    Olá, consegui de forma alternativa aplicar thumbs em imagens originais, bem simples mesmo, falta de colocar a cachola pra funcionar

  6. OnnClick says:

    Como faço para chamar a função na hora que faço o upload das fotos?

    E quais parametros irei passar?

  7. willcom says:

    Colocar o código e não explicar o mesmo, e so atrapalhar e fazer que procura algo serio perder tempo.
    Ou explica ou nem colocar no site, por que nao tem sentido, pois que saber nao esta procurando algo parecido e que esta procurando precisa de no mínimo explicação, comentário. Negativo…

  8. willcom says:

    ****Comentário corrigido.****

    Colocar o código e não explicar o mesmo, e só atrapalhar e fazer que procura algo serio perder tempo.
    Ou explica ou nem colocar no site, por que nao tem sentido, visto que quem sabe nao esta procurando e que esta procurando precisa de no mínimo uma pequena explicação.

    Comentário. Negativo…

  9. paulo says:

    Parece até que copiou e colou de algum lugar.

  10. fabricio says:

    olhem este… quem copiou de quem?

    http://pablo.blog.br/35

    • Aurélio Marinho Jargas says:

      Olhe o nome do autor aqui e olhe o nome do autor lá.
      Isso vai te dar uma dica :)

Leave a Reply

Your email address will not be published. Required fields are marked *