Estou portando um site de comércio eletrônico antigo para o MVC 3 e gostaria de aproveitar as melhorias de design. Atualmente, o site possui imagens de produtos armazenadas em três tamanhos: miniatura, média (para exibição em uma lista) e expandida para uma aparência ampliada. No momento, estamos tendo que fazer upload de 3 imagens separadas com o tamanho exato, fornecer 3 nomes diferentes que correspondam ao que o site espera etc., é uma dor.
Gostaria de fazer upload de apenas um arquivo, o grande, e depois permitir que o site o reduzisse aos tamanhos necessários, e gostaria de ter a flexibilidade de alterar os tamanhos de miniaturas e listas, dependendo das preferências do usuário, fator de forma (por exemplo, celular, iPad , área de trabalho) etc. etc., portanto, podem ser necessárias muitas cópias da mesma imagem. Minha pergunta é: a imagem deve ser reduzida e salva várias vezes após o upload? Em caso afirmativo, o que é uma boa convenção de armazenamento / nomeação?
A outra idéia é armazenar apenas a imagem única, mas redimensioná-la programaticamente antes de servi-la ao cliente. Alguém já fez isso e quais são as compensações além de mais alguns ciclos de máquinas? Como você transmite uma imagem temporária na memória para o cliente (não há URL)?
fonte
ImageProcessor
Imageprocessor é uma biblioteca leve e extensível, escrita em C #, que permite manipular imagens on-the-fly usando o .NET
Redimensionando em tempo real:
ImageProcessor.Web vem com cache como padrão. Qualquer imagem processada é armazenada em cache de forma assíncrona, tanto no navegador quanto no servidor, por um período de sua escolha. O cache do servidor armazena inteligentemente milhões de imagens e atualiza-se silenciosamente, caso a imagem original seja alterada ou o cache expire.
fonte
Supondo que a miniatura seja simplesmente uma versão redimensionada da imagem principal, acho que deve ser feita no momento do upload, mas talvez agendada como um trabalho em segundo plano para não impactar outros processos. Se você redimensionar em tempo real, certifique-se de armazenar em cache a imagem.
O problema disso tudo é que a melhor miniatura para algumas imagens não é um redimensionamento simples do mestre; pode ser necessário aumentar o zoom e recortar de uma maneira que seja movida por humanos. Você pode querer redimensionar automaticamente, mas possui um mecanismo que permita uma substituição nesses casos específicos.
fonte
Uma ligeira variação sobre o que Adam mencionou:
(1) crie uma página de erro personalizada (regra para imagens)
(2) A estrutura dos nomes dos arquivos de imagem deve ser:
A única exceção é a imagem original e deve ser nomeada:
(3) No upload de arquivo, por exemplo: 1245_Original -> todos os arquivos com 1245_ * devem ser excluídos
(4) A página de erro personalizada (assumindo que 1245_Original existe) deve criar dinamicamente o arquivo de imagem solicitado, por exemplo:
e também servi-lo pela primeira vez.
Com efeito, o upload de uma nova imagem limpa o cache.
fonte