Criar thumb (miniaturas) com PHP

  • Autor do post:
  • Categoria do post:PHP DEV

Gerando miniaturas de imagens com PHP

Atualizado:   http://clares.com.br/2012/11/07/gerar-miniatura-php-adicionando-marca-dagua-nas-imagens/

Olá, veremos como gerar miniaturas de imagens (thumb) para uma galeria de fotos, apresentação de produtos ou qualquer outra aplicação. É muito comum encontrarmos sites que exibem miniaturas de imagens ainda da forma antiga, que trata-se de simplesmente redimensionar a imagem com algum software e criar uma pasta chamada thumbs ou miniaturas, muitos aplicativos utilizam essa solução, mas se você pensar em alguma solução mais inteligente que dispense o trabalho do webdesigner por ex. um cms (gerenciador de conteúdo) fica difícil utilizar essa antiga solução, imagine vender ao seu cliente um sistema onde ele possa gerenciar seu conteúdo sem precisar de você, agora imagine que ele queira colocar miniaturas de fotos no site….dai complicou um pouco não é ? ele terá que enviar todas as imagens para você redimensionar e envia-las de volta para ele poder inserir no site, isso não parece ser um sistema com gerenciador de conteúdo, vamos tomar como exemplo um sistema para imobiliárias onde o proprietário cadastra os imóveis e envias as fotos para o site, agora tente imaginar a página principal com os imóveis em destaque……..estranho né, imagine um anúncio com uma foto 800×600 na página principal…agora imagine 20 anúncios como esse, eu acho que fica feio e você? Também não é, então vamos ver como mostrar a miniatura da foto original enviada para o sistema, acredite isso é muito simples!

Em 1º lugar verifique se o seu php está com a biblioteca gd ou gd2 instalada, se não estiver baixe o easyphp, instale e marque a opção gd2 em php extensions, alias o easyphp é maravilhoso, ele já instala o apache, php5 e mysql, se você não conhece está perdendo tempo, falarei sobre ele em um outro post.

Vamos ao arquivo index.php

<html>
<head>
<title>.: Thumbs :.</title>
</style>
</head>
<body>
<img src=”thumb.php?img=image1.jpg” title=”imóvel cod 01″>
<img src=”thumb.php?img=image2.jpg” title=”imóvel cod 02″>
</body>
</html>

Note que acima no src estamos passando a url da imagem para para o arquivo thumb.php, ao invés de passar diretamente a imagem, isso porque o arquivo thumb.php está encarregado de redimensionar a imagem original, mas esse redimensionamento ocorre somente na visualização, ele não altera propriamente a imagem, ela continua no seu tamanho original, apenas o que é mostrado é que foi redimensionado, isso tem que ficar claro, nenhuma imagem pequena é gerada, esse é o truque, o arquivo thumb.php apenas muda as propriedades da imagem para a visualização ok ?

Claro que nesse exemplo eu utilizei uma url pré-definida, mas para o caso de um sistema essa url deveria ser retornada por ex. de uma consulta SQL, no sisteminha (veja aqui o sisteminha) que fiz a algum tempo atrás eu criei uma tabela mais ou menos assim: codimovel_f , urlFoto, descFoto … onde no momento do upload da foto era feita uma inserção no banco de dados contendo a url da foto que acabara de ser enviada, para não repetir os nomes das imagens e eu não ter que ficar renomeando eu utilizei a função MD5() do PHP que gera um nome/string único, em um artigo posterior falarei sobre o MD5.

Vamos ver o tal arquivo chamado thumb.php

<?php
#recebendo a url da imagem
$filename = $_GET[‘img’];

#Cabeçalho que ira definir a saida da pagina
header(‘Content-type: image/jpeg’);

#pegando as dimensoes reais da imagem, largura e altura
list($width, $height) = getimagesize($filename);

#setando a largura da miniatura
$new_width = 120;
#setando a altura da miniatura
$new_height = 100;

#gerando a a miniatura da imagem
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

#o 3º argumento é a qualidade da miniatura de 0 a 100
imagejpeg($image_p, null, 50);
imagedestroy($image_p);
?>

Obs: Para salvar a imagem/thumb em um diretório altere a linha
imagejpeg($image_p, null, 50);
para
imagejpeg($image_p, ‘/diretorio/nomeImagem.jpg/’, 50);

Onde /diretorio/nomeImagem.jpg é o caminho e nome onde deseja armazenar a miniatura.

Muito simples não ? Agora você pode usar o CSS para dar uma geral nesse exemplo, ou pode fazer a coisa ficar mais bonita, você pode usar o lightbox, clique e veja o que você poderá fazer com LightBox! até a próxima.

Download do pacote: thumbs.rar 
Aposto que quer ver funcionando!  então está ai o Thumbs funcionando

Rafael Clares

Este post tem 113 comentários

  1. David

    Olha otimo sistema de thumbs mais naum funcionou no meu servidor tenho php 5 sera q é isso ele tah erro interno 500 no iss”!!! o q sera q pode ser??? sera q pode me ajudar???

  2. David

    Opa ja consegui resolver para funcionar no php5 tem q alterar as seguintes linha

    // recebendo a url da imagem
    $filename = $_GET[‘img’];

    // Cabeçalho que ira definir a saida da pagina
    header(‘Content-type: image/jpeg’);

  3. clares

    Entendi, o problema é que você copiou e colou o código e ele ao invés de estar com aspas/apostofros estava com o ascento agudo/crase. mas tá ai, quem for copiar e colar altere os sinais agudo/crase para aspas/apostofros.

  4. Carlos J. Souza

    Ola, boa noite.
    Parabens pelos artigos acessiveis que voce tem publicado. Para foi bem util e numa linguagem simples, possibilitando melhorarmos futuras implementacoes.
    Abraco.

  5. clares

    Carlos, obrigado pelo feedback.

  6. Victor

    Muito bom, usei e funcionou corretamente e sem complicação!!! Parabéns!

  7. João Luiz

    Não consegui, no Firefox só aparecem quadradinhos.

  8. clares

    Caro João, não só testei como o fiz visualizando no firefox, acredito que você tenha copiado o código e não alterou as aspas/apostrofos, leia os demais comentários ok. Obrigado pelo comentário.

  9. João Luiz

    Amigo, grato pela presteza, desculpe.
    Segundo eu entendi as linhas devem ficar assim:
    // recebendo a url da imagem
    $filename = $_GET[‘img’];

    // Cabeçalho que ira definir a saida da pagina
    header(“Content-type: image/jpeg”);

    Assim eu fiz. E ainda não funcionou.

    Estou enviando para a página assim:
    echo ”;

    Será que o erro esta ai?

  10. clares

    João você tem instalada a biblioteca GD/GD2 no PHP? Se não tiver aconselho a você instalar o EasyPHP que já tem o PHP5 e as extensões necessárias, bastando apenas ativar através do próprio gerenciador do EasyPHP, por default o GD/GD2 está desabilitada. Talvez seja isso, ao clicar no link do exemplo funciona ai ? Abraços

  11. João Luiz

    A biblioteca esta instalada e funcionado. Sim o exemplo funciona.
    Na minha pagina original as imagens aparecem grandes.
    O que fiz foi substituir na linha:
    echo ‘<img src=”‘;
    // echo $files.$entrada_arq.'”;
    O $files… por thumb.php?img

  12. clares

    João, me desculpe mas acho que você deveria ler novamente o post. Não tem como errar! De toda forma
    irei disponibilizar o arquivo para download em http://clareslab.com.br/learn/thumbs.rar será mais fácil por que à medida que você vai alterando algo que já está funcionando eu já não tenho mais como ajuda-lo, infelizmente. Já está escrito no post como funciona, mas irei repetir…o arquivo thumbs.php retorna uma única imagem sendo preciso para isso passar a url da imagem! Abraços

  13. daniel

    Vai me ajudar no projeto final da escola 😀

  14. Osvaldo de SouzaTavares

    Amigo não conseguir fazer funcionar,ao aparece uns quadradinhos….
    como que o links das imagens tivesse errada;;;

  15. clares

    Olá Osvaldo, é importante lembrar que o código acima está informando que os arquivos php e as imagens estão no mesmo diretório. Quero dizer, se suas imagens estão por ex: em um diretório separado (que seria o correto) então você deverá passar a urlDiretorio+nomeDaImagem. Por ex:
    src=”thumb.php?img=diretorio/image1.jpg” , faça o download do arquivo e dê uma analisada.
    Um grande abraço.

    Obs: Pessoal atentem-se aos apóstofros/aspas … verifiquem se estão corretos.

  16. Junior Campos

    Clares, esse sistema aceita gif e png também?

  17. Tiago

    Olá, bons códigos, muito úteis!
    Tenho uma dúvida, este comando gera uma miniatura da foto (thumbs), mas esta é um arquivo temporário?? ocupará espaço em meu servidor?? onde será salvo??

    Obrigado, parabéns pelo código!

    1. Celio Ferraz

      Oi fiz o download do arquivo e joguei no servidor na imagem coloquei assim beleza a imagem pequena aparece mais ao clicar não aparece a imagem grande.????

      1. Rafael Clares

        rs rs rs se você colocar o link para a imagem vai aparecer!

  18. Rafael Clares

    Ola Tiago, não ocupa espaço em disco, o que acontece é que não são criadas imagens pequenas mas isso já comentei no post. a imagem é apenas redimensionada em tempo de execução, tem seu tamanho e qualidade reduzidos ao ser “exibida”. Portanto não se preocupe pois elas não ficam em temp ou algo assim. Abraços

  19. Ewerton Cavaliere Muller

    Ola Rafael Clares, a muito tempo estava procurando um tutorial desses. Ficou muito bom. mais uma coisa q me deixou encucado, como faço pra ele redimencionar só o width e heigth fazer automaticamente???

    obrigado

  20. Rafael Clares

    Olá Ewerton, amigo deixa eu ver se entendi a pergunta. Você quer mudar apenas a largura e manter a altura? Se for isso a altura original tem seu valor contido na variável $height. $new_height é a nova que determinamos. Obrigado pelo comentário. Abraços

  21. Thiago

    Olá …

    Eu estou procurando por um exemplo desses usando PHP5 Orientado a Objeto, você programa em OO também?

    Estou precisando aprender como separar as coisas, tenho que fazer um site com apenas uma foto miniatura na pagina inicial, como se eu pudesse definir a foto CAPA, e quando eu clicasse nessa foto abrisse a pagina com todas as fotos, pode até ser usando javascript ou ajax, para não precisar abrir outra pagina, apenas uma janelinha, mas isso deve ser mais complicado.

    Sou iniciante PHP, li 2 livros ja, e estou aprendendo OO agora, e procurando ver exemplos como fazer as coisas.

    Gostaria muito que me desse uma ajudinha se puder..

    Abração! E parabéns pelo tutorial.

  22. Rafael Clares

    Legal Thiago, entendo o que você quer fazer, dê uma olhada nesse sisteminha que fiz.
    http://clareslab.com.br/webimoveis/
    olhe o painel administrativo em
    http://clareslab.com.br/webimoveis/admin
    Esse sistema está desatualizado neste endereço.
    A nova última versão que contém algumas melhorias você pode ver em http://74.86.147.228/~webdemo/
    mas nesse você não terá acesso ao painel admin, porém poderá ver algumas diferenças… de toda forma, entendo um pouco o que você quer… teste esse exemplo de forma que você entenda bem e depois nos falamos denovo para ver uma próxima etapa para você construir seu sistema ok. Abraços e muito obrigado pelo feedback.

  23. Jackson

    Cara!!! Muito obrigado mesmo! Fazia tempo que estava procurando algo pratico e objetivo assim para criar thumbs… O conteúdo do seu blog é muito bom, espero que continue assim. Vlw!

  24. Eliseu sb

    Clares, essa matéria é ótima, a melhor sobre o assunto que encontrei, particularmente falando.

    Obrigado por isso e abraços

  25. Xupisco

    Mto bom esse tutu veio, nao estava funcionando, entao baxei a que vc postou ali e funcionou, e quem quizer que ao clicar na imagem abra o arquivo original e numa nova aba coloque antes de <img src=

    <a href=”caminho para a imagem original” target=_blank>

  26. Raphael Azeredo

    Rafael, queria lhe dar os parabéns pelo excelente trabalho que você vem fazendo no seu blog, com excelentes post de facil entendimento e com contúdo super atrativos, obrigado mesmo, já está nos favoritos

  27. Paulo

    Boa tarde Rafael, interessante seu “sisteminha” muito legal, podemos conversar sobre ele? por favor entre com contato com meu email.
    Feliz Ano Novo a todos !!!!!!!
    Obs. Não tenho corretora nem imobiliária.

  28. Rodrigo Martins

    Vlw cara gostei muito do codigo, estava precisando disso faz tempo.caso eu queira salvar a imagem thumb numa pasta como que faço….vlw

    1. Rafael Clares

      Olá Rodrigo, para salvar a imagem altere a penultima linha do arquivo PHP
      imagejpeg($image_p, null, 50);
      troque o null pelo o caminho onde quer salvar a imagem ex:
      imagejpeg($image_p, ‘/home/userx/images/img.jpg’, 50);

  29. Luiz Felipe

    Parabéns pelo post, o blog está excelente e isso ajudará a diminuir a taxa transferência do meu site, exibo miniaturas de programas e estará me ajudando muito este código, já que não encontrei informações sobre gd ou gd2.
    Já testei offline e funcionou nos conformes. Agora vou integrar ao meu site e depois dar upload.
    Obrigado! 😉

  30. Luiz Felipe

    Olá, como eu comentei, o código funciona perfeitamente no que é proposto, mas eu notei que ao invés de diminuir meu bandwith, aumentou, isso ocorre porque toda vez ele visualiza a imagem, ela é baixada novamente. Não teria como o navegador imprimir a imagem uma vez e depois disso, toda vez que ele imprimir a imagem de novo, usar a do cachê, como seu eu usasse um link de imagem normal?
    Mesmo eu tendo uma boa experiência com PHP, eu nunca mexi com imagens e não consegui fazer o que eu descrevo acima. =/
    Ei, falando a respeito do EasyPHP, eu já tive alguns problemas com ele, atualmente eu uso o Vertrigo, julgo melhor e o utilizo.

    Li o comentário que você fez sobre meu site, muito obrigado!

    1. Rafael Clares

      Testei apenas o desempenho em relação ao tempo de exibição das imagens, não posso afirmar que o que você descreve realmente ocorre por eu não ter testado, nem sei se o farei. Agora se quiser algo mais completo utilize a class thumbnail que possui uma gama maior de config. e também de efeitos como reflexo, watermark, etc… Quanto ao EasyPHP, nunca tive problema algum e continua sendo uma indicação, instalei uma vez e pronto… apenas o utilizo. Obrigado pelo comentário,

  31. Parrudinho

    Vlw pelo script ajudo muito no meu sistema t+
    abraço

  32. Moisés

    Não funciona comigo, não deve ser problema de código, mas alguém já viu este erro?
    “Warning: getimagesize(foto.JPG) [function.getimagesize]: failed to open stream: No such file or directory in C:wwwsitesistemacarregafoto.php on line 26

  33. Moisés

    O erro inicial, era que estava separando o nome do arquivo assim o código não sabia de onde estava vindo a imagem.
    Solucionado esse erro, veio outro: imagecopyresampled(): supplied argument
    Na verdade a foto sairá do pc do usuário e será salva na pasta thumb no servidor.
    Inicialmente deverá gerar 2 imagens: 800 X 600 e 120 X 100 e salva-las com nomes destintos e depois serem salvos seus nomes no banco de dados.
    Mas para o momento, preciso entender como funciona para carregar ao menos uma simples imagem redimensionada.
    Anotei no código onde retorna o erro.

    Grato;

    $arquivi_nome = $_POST[“max_foto”];
    $filename = $arquivo_nome;
    $percent = 0.10;
    header(“Content-type: image/jpeg”);
    list($width, $height) = getimagesize($filename);
    $new_width = 120;
    $new_height = 100;

    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($filename);

    //nesta linha da o seguinte erro:Warning imagecopyresampled(): supplied argument is not a valid Image resource
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    $pasta_dir = “thumb/”;//diretorio dos arquivos
    $arquivo_nome = $pasta_dir . $arquivo[“name”];

    //arquivo_nome não está entrando
    imagejpeg($image_p, $arquivo_nome , 50);
    imagedestroy($image_p);

    1. Rafael Clares

      Moisés,

      $arquivi_nome = $_POST[‘max_foto’] – onde está sendo usado ?
      pq logo na linha abaixo vc diz $filename = $arquivo_nome;
      acredito que $arquivi_nome e $arquivo_nome são difrentes, mas é isso mesmo?

  34. Adilson

    Rafael, show de bole este script.
    Mas no meu para salvar a mini/thumb, não foi nem por reza….rs
    Coloco como vc descreve e nada, deu permissão a pasta tb nada.
    imagejpeg($image_p, ‘mini/teste.jpg/’, 50);

    Abraços.

    Adaysso

    1. Rafael Clares

      Pow Adilson, algo deve estar errado mesmo, acabei de testar aqui e gera normalmente a figura.
      Pegando o mesmo script do exemplo alterei a linha para

      imagejpeg($image_p, “thumbs/$filename”, 50);

      Onde thumbs/ é o diretorio onde salvo a miniatura …. e $filename é nome original da imagem.
      Obs: Se vai salvar a miniatura não esqueça que tem que alterar o local de onde serão exibidas as imagens depois.

      De uma olhada aí em relação à diretório e também a forma como está passando o nome da imagem …

      abs

  35. Adilson

    Só gerou uma única vez, sem a extenção da imagem ‘mini’.
    Mas resolvi e funcionou para o que preciso, pois minhas imagens são gravadas no bd e é exibida apenas a primeira ex: thumb.php?img=fotos_anuncios/

    Irei ver o que isso poderá ocasionar com o uso da banda, já que é gerado temporaria as thumbs para cada usuários no site, e se gerasse uma está principal, ficaria bem melhor.
    Conseguir um script que faz isso, irei tentar adaptá-lo.

    Valeu um forte abç.

    Adaysso

  36. Moisés

    Só não está funcionando no Chrome!
    Obs: img- vem do formulário(input type=file)

  37. Fernando Souza

    Olá, Muito obrigado pela ajuda… estava precisando deste sisteminha… agora sem querer abusar, como faço para que as miniaturas reduzam proporcionalmente?

    1. Rafael Clares

      Fernando, basta alterar as linhas abaixo:
      $new_width = 120;
      $new_height = 100;

      alterando o valor fixo em pixels por valor percentual, ex:

      $new_width = ($width / 5);
      $new_height = ($height / 5);

      Onde $new_width é a nova largura resultante da largura original ($width) dividido por 5 neste caso, como percebeu
      o valor da nova largura não está fixo (120) e sim baseado na divisão do valor original dividido por 5 ($width/5)
      Quero dizer que você pode explorar estas duas linhas para chegar ao resultado que deseja.

      abraços,

  38. adriano

    caro amigos estou com um problema no meu arquivo thumb.php ou sei la pois estou iniciando nessa de PHP exemplos – http://www.veiculossaopaulo.com.br/thumb.php?70prop2=70&arq=1069407089_CPA-5900_01.jpg
    assim ele so me da a msg que a imagem nao foi encontrada …
    e se eu mudar (por o nome da pasta uploads)
    http://www.veiculossaopaulo.com.br/uploads/1069407089_CPA-5900_01.jpg ai abre a imagem do carro

    aqui esta o thumb.php

    <img src="”>

    POR FAVOR ME AJUDEM POIS COMPREI ESSE SCRIPT DE UM SITE AI http://www.classicarro.noxweb.com.br/
    E O CARA NUM TA NEM AI PRA MIM
    OBRIGADO DESDE JA

    1. Rafael Clares

      Adriano, por favor leia os comentários, a solução para o problema certamente já existe neles, sabe a versão de seu PHP?
      até mais
      obrigado pelo comentário

  39. Alexandre

    como faz para gerar tipo 5 thumbs por linha?

    1. Rafael Clares

      Alexandre, basta colocar 5 imagens e depois uma quebra de linha
      .

  40. Gisele

    Eu tenho que montar um sistema semelhante ao seu e queria saber como montar essas buscas com ajax, vc tem algum tutorial?
    Estou montando com dreamweaver.

    1. Rafael Clares

      Gisele, não compreendi sua necessidade, você está comentando um post sobre miniaturas de imagens e diz que deseja fazer um sistema semelhante, mas comenta também buscas com ajax, nada que tenha nesse post.
      Talvez consiga me dizer melhor o que precisa. Não tenho tutoriais completos sobre tecnologias, apenas alguns trechos de códigos que julgo úteis em alguns momentos e compartilho no blog;
      Até

      1. Gisele

        Me desculpe, o sistema imobiliário que vc criou (tem busca com ajax), esse risize tbm achei muito útil, mas eu vou tentar criar uma imagem miniatura mesmo.

        Obrigada

          1. Gisele

            Onde eu posso postar minha dúvida sobre o sistema webmoveis que você criou?
            Queria saber como eu monto o banco de dados, tem uma tabela só para as imagens?

          2. Rafael Clares

            Gisele, o sistema imobiliaria é um produto meu, não coloquei o código à disposição.
            Vendo o código fonte por R$ 50,00;

            tabela imoveis [idimovel,desc,etc]
            tabela fotos [idfoto,idimovel,etc]

            Até,

          3. Gisele

            valeu, eu já comecei a montar, só a tabela já está bom.

  41. Conrado Carvalho

    Oi Rafael, tudo bem? Muito inteligente essa parada, parabéns! Olha só, está funcionando comigo, só estou curioso com uma coisa e talvez vc já tenha vivido algo assim. Aleatoriamente, ao realizar um pesquisa, que retorna um thumb, este desaparece e ao realizar a mesma pesquisa o thumb aparece, uma espécie de intermitência. Já relataram algo parecido? Você teria uma idéia do que seja? Eu suspeite de cache da URL, então o que fiz foi acrescentar na query string um variável com um número rand, só para diminuir esse risco.

    Abraço, Conrado

    1. Rafael Clares

      Olá Conrado, não tive nenhuma ocorrência do problema, veja, utilizo esse mesmo script em um programa antigo a mais de 2 anos…
      http://webimoveis.clareslab.com.br/
      mesmo realizando buscas não tem ocorrido, não tenho idéia do que esteja acontecendo.

      Utilize a classe thumbnail é bem melhor, eu a utilizo hoje em dia e nunca tive problemas.
      Segue o link: http://phpthumb.gxdlabs.com/

      abraços

  42. Marcelo TZK

    Olá, primeiro parabéns, foi o único que consegui fazer funcionar. Só faltou um upload e a inserção automática dó cód. das imagens para visualização dos thumbs (hahah, ñ quero mais nada né!).

    Bom, o que quero anunciar é que criei um método para mudar proporcionalmente os thumbs.

    Substitua tudo isso:
    #setando a largura da miniatura
    $new_width = 120;
    #setando a altura da miniatura
    $new_height = 100;

    Por tudo isso:
    #setando a proporcao da miniatura
    if($height $width) {
    $new_height = (160);
    $new_width = (160*$proporcao);
    }else{
    $new_width = (215);
    $new_height = (215*$proporcao);
    }

    Escolha o tamanho da largura e altura mudando os valores de 160 equivalente a altura e 215 a largura.

    Não sou programador, sou designer, e fiquei mt feliz em conseguir fazer isso sozinho e mais ainda em poder distribuir o cód. Vlw a todos.

  43. Marcelo TZK

    ÚLTIMA ATUALIZAÇÃO DO CÓDIGO PARA GERAÇÃO DE THUMBS PROPORCIONAIS.

    SUBSTITUA:
    #setando a largura da miniatura
    $new_width = 120;
    #setando a altura da miniatura
    $new_height = 100;

    POR:
    #setando as proporcoes desejadas
    $largura = 200;
    $altura = 150;

    #setando a proporcao da miniatura
    if($height > $width) {
    $new_height = $altura;
    $new_width = $width*$altura/$height;
    }else{
    $new_width = $largura;
    $new_height = $height*$largura/$width;
    }

    if($new_width > $largura){
    $new_width = $largura;
    $new_height = $height*$largura/$width;
    }

    if($new_height > $altura){
    $new_height = $altura;
    $new_width = $width*$altura/$height;
    }

  44. Kadu de Souza

    Ja está nos meus favoritos!
    Valew!!

  45. Bruno Perin

    Boa tarde Rafael, queria só tirar uma dúvida quanto ao carregamento da imagem. Por exemplo, tenho uma imagem de 1MB e configurei no thumb para ele exibir com 50% da resolução, então a dúvida é se o script carrega 1MB (da imagem original) para depois converter ou se ele carrega apenas 500kb?

    Também queria saber se você tem algum script ou tutorial de como converter a imagem ao fazer upload.

    Vlw e parabéns pelo script

  46. Diego

    Ola,

    parabens muito bom tutorial, unico que consegui fazer funcionar.

    Tens como fazer com multiplo upload, e gravar o nome da foto no banco.

  47. Edmar

    Cara estou com uma dúvida, estas imagens estão todas num tamanho fixo, mas quando se trata de fotos desproporcionais a tem como o código pegar o tamanho automático das thumb e fixa-las no index automáticamente….?

    1. Rafael Clares

      Edmar, poxa cara hoje estou bastante lento viu, não entendi bem… o “tamanho automático das thumbs”… me explica ai direitinho rs rs
      valeu

  48. Leandro

    Amigo, muito interessante torna esse modo em que vc usará a resolução que lhe for ideal. Porém, penso se não seria melhor salvar no servidor varios tamanhos preferenciais para a imagem, envitando assim o uso demasiado dessa biblioteca. Penso que sites como o Flickr mantém além do original e outros tamanhos que são ideais.

    1. Rafael Clares

      Opa, concordo com você, mas salvar é uma opção que está ao fim do post.

      Obs: Para salvar a imagem/thumb em um diretório altere a linha
      imagejpeg($image_p, null, 50);
      para
      imagejpeg($image_p, ‘/diretorio/nomeImagem.jpg/’, 50);

      abraços

  49. Leuzinhu

    eae galera, tipo, da um help ae, eu queria q as imagens ficassem proporcionais, mas sem mudar o tamanho, seria uma espece de crop, ia diminuir e depois cortar no centro pra manter o aspecto. é meio dificil, mas se alguem souber agradeço

  50. Alone

    Perfeito!
    Acompanho sempre seu blog, parabens!

  51. Adriano

    Meus thumbs ficaram pretos.
    Alguém sabe o que pode ser?
    Ta tudo certinho mas nao aparecem as imagens das miniaturas.
    Obrigado

  52. Elvis

    Muito Obrigado!
    Seu post de 2008 é o primeiro nas pesquisas do Google sobre php thumb 😀

    E até hoje ainda esta a fazer bastante alvoroço entre o pessoal da Web 😉

    Valew’S!

  53. Wendell

    Rafael, muito bom o artigo, muito útil, mas estou tendo um problema, usei ele em uma aplicação que tenho aqui e algumas imagens não são exibidas, existe alguma limitação com relação ao tamanho das originais, pois elas são bem grandes.

    Abraço.

    1. Rafael Clares

      Wendell. não existem limitações, dê uma lida nos comentários e descubra a versão do seu PHP, pode ser isso e se for, a solução está nos comentários.
      Até logo,

  54. vagner

    Perfeito, direto ao ponto, separado da camada de visão

  55. rachel

    Oie Rafael, tudo bom ?

    Muito bom seu blog.. 🙂 Parabéns. Olha só, não sei se vc vai saber me ajudar, eu já procurei em tudo quanto é canto solução para o meu problema, mas simplesmente não encontro nada.. Bom, o site http://www.envolverde.com.br está usando a biblioteca phothumb a principio, tudo ok, sem problema alguma, mas precisamos gerar uma news com as atualizações do dia, nesse momento começaram os problemas.. Simplesmente o thumb dá pau. Aparece essa mensagem:

    AntiOffsiteLinking( ) – “www.envolverde.com.br” is NOT in
    $this ->config_nooffsitelink_valid_domains (envolverde.com.br)

    O que é mais estranho, é que às vezes funciona, às vezes não funciona.. agora, o que é certo é que quem recebe no hotmail e no ig sempre vê essa mensagem.. Nos demais parece que depende mais do humos do phpthumb do que qualquer coisa..rs..

    Não sei mais para onde correr.. Por isso se souber de algo agradeço muito… Obrigada..

    1. Rafael Clares

      Oie, eita que confusão hahahaha!
      Te ajudo sim… Vou te mandar um e-mail tá!
      tchau

  56. Acson

    Caraca! Brother obrigado por nos passar essa informação! E agradeco mais ainda por ter colocado os arquivos zipados pra down.
    Paaaaaaaaaarabéns, fiquei procurando como fazer isso e vários sites falavam…falavam..mais nao adiantava. E eu precisava era disso mesmo, no “src” da imagem não mostrar o caminho completo tipo “/imagem/foto01.jpg” e sim algo pra camuflar, pois bem, achei :D!
    Mais uma vez parabéns, desde 2008 o artigo e até hoje ajudando muita gente.
    Abraço

  57. Acson

    Ah, gabriel, eu poderia postar seu post no meu blog e colocar teus créditos e o link pra tua página? Obrigado 🙂

    1. Rafael Clares

      E ae, beleza irmão, pode colocar sim!

  58. marcelo

    thumbnail é pra reduzir tamanho de um download desnecessário. A pessoa só baixa a foto que quer ver. Se apenas redimensiona a imagem para exibí-la pequenininha, não há razão para esse carnaval todo, atribui largura e altura pra essa *** e pronto. Coisa ignorante.

    1. Rafael Clares

      E você é tão entendido que veio parar aqui no sambódromo né?
      Outra coisa ow samurai, a linha:
      imagejpeg($image_p, ‘/diretorio/nomeImagem.jpg/’, 50);
      o último parâmetro recebe justamente o número em relação à qualidade da imagem 0 a 100 e reduz o tamanho do download.
      Falou tiozão, de toda forma, obrigado pelo comentário!

  59. Totti

    E como eu faço se não tiver uma imagem cadastrada, colocar uma padrão ? tem como ?

    1. Rafael Clares

      Pode sim, sem problemas, desde que saiba o caminho e nome da imagem é só informar!
      até mais

  60. Rodrigo Poli

    Boa noite,

    Você ja fez testes com imagens grandes tipo 3072×2304, ao tentar usar aqui retornou o seguinte erro: A imagem contem erros e nao pode ser exibida.

    1. Rafael Clares

      Olá pode ser um erro da classe phpThumb, tente baixar a versão mais recente!

      1. Leonardo Quesada

        Clares,

        Show de bola. Ajudou muito.
        Obrigado e abraços.

  61. Felipe

    Cara… não é mt aconselhavel esse script ai pois se for uma pagina onde tem muitor produtos, por exemplo, vai demorar pra carregar pq ele carrega a imagem por completo apenas mudando as dimenções

    1. Fred

      O que sugere então??

  62. Tiago

    Cara tava procurando por isso! Mtu bom vlw… Tá nos favoritos.

  63. daniel

    De fato deu certo, tem como bloquear essa função para usuários do navegador Chrome? Já que nesse navegador as miniaturas aparecem com alta resolução ao contrário do Firefox e ie. E dizendo que essa função REDUZIU a resolução das miniaturas para o Chrome.

    Seguindo a lógica mais vale uma miniatura + – em 3 navegadores, do que 1 ótima e 2 péssimas.
    Grato.

    1. Rafael Clares

      Daniel, até dá, utilizando jscript e userAgent… mas não é o foco do post.
      Dê uma lida sobre User Agent do Jscript para quando for Chrome o jscript tomar uma ação de “parar” a aplicação ou redirecionar para outra tela …

  64. Miojex

    Obrigado manolo gostei (:

  65. JLânio Morais

    Excelente função. Obrigado por compartilha-la.

  66. Gabriel Coelho

    As imagens soltas dentro de um diretório junto ao arquivo thumb funciona perfeitamente
    Mas quando coloco as imagens dentro de um diretório, por exemplo uploads, nem debaixo de reza ele pega a imagem por $_GET, tem como me dar uma força?

    Grato

    1. Rafael Clares

      Gabriel, desculpe a demora em responder, você tem que passar o diretório no parâmetro ou adicionar ao GET, ex:
      $img = “myDir/”.$_GET[‘img’];

  67. Henrique Zanini

    Tentei fazer a adaptação para criar a thumb em png, mas não funcionou, você poderia me dizer como ficar o código? :s

    1. Rafael Clares

      Eh Henrique, cara teria que alterar o código para gerar outras extensões. Esse script já é bem velho, irei postar um novo script com mais possibilidades;

      1. thiagocneves

        Você ja postou esse script com outras possibilidades? Como por exemplo cortar a imagem: Uma imagem retangular (2000 x 1000) ser redimensionada (200 x 100) e cortada proporcionalmente para as medidas de um quadrado (100 x 100) a partir do centro?

        1. Rafael Clares

          Thiago, infelizmente não era o foco do post. Mas irei postar sim algo completo, é que esse post é bem antigo, você viu que é de 2008 ? por isso é tão “pobrinho” mas irei criar um novo post!

  68. Alexandre Mateus

    O script pode ser velho, mas mesmo 4 anos depois ainda ta ajudando gente por aqui. Muito obrigado.

  69. Luiz Tadeu

    Muito bom, muito obrigado, deixou o index do meu site muito mais leve, pois ele não apenas redimensiona, mas também altera a qualidade, já que a imagem fica pequena, não faz diferença alguma. Obrigado.

  70. Bruno

    Parabéns! Esse código tá perfeito: enxuto e direto. Suas dicas foram fantásticas e você, nesse post, me ajudou a transformar um código enorme que eu tinha em poucas linhas. Genial. Parabéns!

  71. Alexandro da Silva

    Tem como eu pegar os valores de altura e largura dinamicamente e qualidade tbm, será q vc pode me ajudar?

  72. Felipe

    muito bom. vlwww

  73. João ERnani

    E como posso fazer um crop na imagem para que não retorça?

  74. Rodrigo

    Muito esclarecedor. Vou usar essa função para fazer as thumb. Obrigado

Os comentários estão encerrados.