Pergunta

Estou criando uma rede social onde os usuários carregam sua imagem de perfil.

Esta imagem será usada em sua página de perfil na dimensão 150/150 px.

Na página inicial, ou seja, no feed de atividades do usuário, preciso que a mesma imagem esteja em 75/75 px.

Qual seria a melhor prática para fazer isso

  1. Redimensione a imagem rapidamente (timthumb).
  2. Redimensione e salve a imagem no servidor.
Foi útil?

Solução

Ao enviar uma foto, crie o conjunto necessário de miniaturas e salve como [nome_da imagem]dedão[size_name].jpg ou algo assim:

uploaded: file.jpg
medium: file_thumb_150x150.jpg
small: file_thumb_75x75.jpg

A convenção de nomenclatura depende de você, mas de forma rápida você obtém acesso fácil aos dados de que precisa.Não há necessidade de usar o servidor para gerá-lo dinamicamente ou dimensioná-lo em um navegador.

Outras dicas

Eu tenho trabalhado neste problema por um tempo e me deparei com 3 maneiras principais de fazer isso:

    .
  1. Gerar imagens em miniatura no ponto de carregar como um processo de fundo.
  2. gera imagens sob demanda através do aplicativo principal
  3. gera imagens sob demanda usando o URL como uma API

    Cada abordagem tem seus prós e contras.

      .
    1. Essa abordagem é a mais restritiva, você precisa saber todos os usos e tamanhos das miniaturas na frente para que você possa gerá-los imediatamente após o upload. A principal vantagem é que as imagens podem ser servidas de forma eficiente usando um servidor como o NginX e são apenas como quaisquer outros recursos estáticos.
    2. django tem uma biblioteca chamada sorl-miniatura que fornece uma tag de modelo para gerar miniaturas de todos os tipos como e quando são necessários. Ele usa uma loja de chave rápida / valor para acompanhar quais miniaturas foram geradas e invalidas imagens geradas graves automaticamente se detectar a imagem de origem ter sido alterada. A tag de modelo retorna o URL para a imagem gerada, que pode ser atendida diretamente de NGINX sem passar por uma camada de script. Mais flexível que 1, mas você não pode (por exemplo) gerar um URL de imagem usando o JavaScript e espera que ele exista, ele deve ser feito pelo código de back-end do site ou modelos.
    3. totalmente dinâmico e flexível, você pode obter qualquer versão da imagem que você quiser apenas ajustando o URL, a Amazon usa esse método, conforme todos esses sites de geração de imagens de espaço reservado. Pode gerar URLs em Javascript e fazer quaisquer coisas que quiserem. O próprio site não precisa de qualquer conhecimento da camada de miniaturas aquém de talvez alguns métodos auxiliares para gerar os URLs para você. Mas isso é obviamente a maneira mais intensiva de recursos de fazer as coisas e precisa ter certeza de que sua arquitetura pode lidar com a carga. Você precisa usar todos os truques no livro para invalidar caches em tempo hábil, evitar hits desnecessários no script de redimensionamento etc.

      Eu sou um grande fã da 3ª maneira de fazer as coisas, gosto de geração de imagens para ser completamente isolado da minha principal funcionalidade do site e gosto da considerável flexibilidade, mas você precisa saber o que você está fazendo quando para configurar seus servidores para lidar com isso.

Eu te digo o que faço.Eu sempre armazene a imagem em tamanho real, mas renomeando-a Ussing o ID do DB com zeros à esquerda.No primeiro uso, eu crio a miniatura e armazená-la em outra pasta, usando-a nas próximas chamadas.

Se o espaço do servidor e a largura de banda for um problema, você deve considerar usando um CDN.

Amazon tem um bom serviço,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top