Como criar miniaturas de imagens (thumbnails) em tempo real com CodeIgniter

25 de março de 2013, em Tutoriais, por

Não raramente é preciso, em sites e sistemas dos mais variados tipos, criar miniaturas de imagens em tempo real. Não surpreendentemente, é simples a criação de thumbnailson the fly” usando o CodeIgniter.

Este artigo é altamente inspirado no post “Create thumbnails on the fly with CodeIgniter” do blog de Danny Herran.

Aviso inicial

Antes de partir para a solução de como criar thumbnails com o CodeIgniter em tempo real (na qual usaremos a Image Manipulation Class), é preciso deixar claro que criar essas miniaturas “on the fly” não são “amigáveis” ao servidor, já que fazer isso consome recursos. Idealmente, miniaturas devem ser geradas assim que as imagens são criadas/carregadas.

No entanto, existem ocasiões em que é absolutamente necessário gerar miniaturas na hora, “em tempo real”, e é justamente para estes casos que este artigo é útil ao ensinar como gerar miniaturas de imagens on the fly usando o CodeIgniter.

Codificando a solução para gerar miniaturas

Para começar, é preciso criar um novo controller – e atribuir um nome que o identifique inequivocamente, como, por exemplo “Thumbs”. Frisando que, embora somente seja mostrado um método relativo à criação das miniaturas, você pode ter quantos métodos forem necessários neste controller para lidar com caminhos adicionais ou configurações diferentes.

Também, a fim de evitar que uma mesma miniatura seja gerada a cada carregamento de página, este código tentar ler a miniatura antes de criá-la. Para que funcione, você precisa de um diretório “thumbs” (ou outro nome de sua preferência), no qual todas as miniaturas serão salvas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Thumbs extends Controller {
 
    public function __construct()
    {
        parent::Controller();
        $this->load->library('image_lib');
    }
 
    public function products($width, $height, $img)
    {
        // Checa se a imagem existe; se não existir, usa uma imagem padrão
        $img = is_file('assets/main/images/products/'.$img) ? $img : 'default.jpg';
 
        // Se a miniatura já existir, ela é que será usada
        // (não há necessidade de usar a GD library de novo)
        if ( ! is_file('assets/main/images/products/thumbs/' . $width . 'x' . $height . '_' . $img))
        {
            $config['source_image'] = 'assets/main/images/products/' . $img;
            $config['new_image']    = 'assets/main/images/products/thumbs/' . $width . 'x' . $height . '_' . $img;
            $config['width']        = $width;
            $config['height']       = $height;
             
            $this->image_lib->initialize($config);
            $this->image_lib->resize_crop();
        }
         
        header('Content-Type: image/jpg');
        readfile('assets/main/images/products/thumbs/' . $width . 'x' . $height . '_' . $img);
    }
 
}

Então, sempre que você precisar de uma imagem com uma miniatura gerada na hora, chame o Controller diretamente, desse jeito:

?View Code HTML4STRICT
<img src="thumbs/products/150/150/imagem.jpg" width="150" height="150" alt="">

O método irá procurar imagem.jpg em assets/main/images/products/ (que, obviamente, deve ser adequado às necessidades de seu projeto) e irá mostrar a imagem redimensionada de acordo com as dimensões passadas como argumentos ​​para a função.

O “grande truque”, fora a codificação da função principal, em si, é o uso de header('Content-Type: image/jpg'), que garante que o recurso será servido como uma imagem.

É fácil criar miniaturas com o CodeIgniter!

Obviamente esta é uma ideia-base e você deve adaptar a classe às necessidades que surgirem no seu projeto, mas, com estas poucas linhas de código, já deu para perceber o quão fácil é criar miniaturas em tempo real com o CodeIgniter e como você pode se beneficiar disso nas situações em que este recurso se fizer necessário.

E você? Como cria suas miniaturas em tempo real em projetos usando CodeIgniter?

14 comentários em "Como criar miniaturas de imagens (thumbnails) em tempo real com CodeIgniter"

gravatar

Aléx  em 26 de março de 2013

Deixo aqui também minha dica: http://alexdeoliveira.com.br/redimensionando-imag

gravatar

Rafael  em 4 de abril de 2013

Alguem sabe como fazer um multiupload simples no codeigniter?

gravatar

luiz  em 18 de abril de 2013

Ola criei um sistema de upload mas quando envio uma imagem maior que 1mb ele não cria a thumbs saberia me informar se tenho que relaizar algum ajuste na configuração?

gravatar

Coelho  em 29 de abril de 2013

Está dando erro! =D

gravatar

Tárcio Zemel  em 12 de maio de 2013

Em breve vamos publicar um artigo sobre isso! :-)

gravatar

Tárcio Zemel  em 12 de maio de 2013

Pode ser muita coisa, desde configuração de servidor, configuração do php.ini, enfim, não dá pra responder só com isso de informação.

gravatar

Tiago Geremias  em 25 de maio de 2013

Otimo artigo, mas alguem poderia me tirar uma duvida, gostaria de criar um thumb de 150px por 150px apartir do meio da imagem.

gravatar

Tárcio Zemel  em 27 de maio de 2013

Dá pra usar os parâmetros "x_axis" e "y_axis", mas envolve um pouco de cálculo para saber o tamanho total da imagem e quanto você quer de thumb.

Dá uma olhada na documentação que explica melhor: http://ellislab.com/codeigniter/user-guide/librar

gravatar

Paulo Souza  em 19 de agosto de 2013

Valeria lembrar que gerar imagens em tempo de execução depende do nível de acesso do seu sistema e do servidor usado também.

gravatar

Marco Aurélio  em 8 de setembro de 2013

Olá pessoal,
Tenho procurado um fórum de discussões sobre CodeIgniter em portugues, mas não tenho tido muito sucesso. Caso alguém possa me indidar algum, ficaria grato.
Me perdoe o moderador do site, mas tenho alguns problemas com relação ao carregamento de imagens.
Postei minha dúvida no fórum do CodeIgniter e caso alguém possa me auxiliar ficaria grato.
Abraço
Marco Aurélio
A tempo: Parabéns pelo site, vem sendo uma importante fonte de pesquisa para meus trabalhos.

gravatar

jon  em 6 de fevereiro de 2014

Como faz upload de varias imagens no codeigniter? tipo para criar uma galeria de fotos.

gravatar

Rodrigo  em 27 de fevereiro de 2014

Tem o http://www.memex.com.br que cria thumbs de sites só colocando alguns parâmetros no src da imagem. Funciona muito bem e é de graça!

gravatar

JohnDoe  em 17 de dezembro de 2014

A função resize_crop() não existe. CI Versão: 2.2

gravatar

diego  em 22 de dezembro de 2015

muda para resize()

    Comente!