Pergunta

estamos maintaing um banco de dados de mídia de imagem em uma webapplication grande escala. Os jpgs de alta resolução são grandes (> 15 MB) e não deve ser disponibilizado para download de forma alguma. Agora precisamos fornecer acesso aos detalhes (culturas) das imagens para os clientes (como um zoom-in função). O cliente deve ver uma versão downskaled da imagem e ser capaz de selecionar uma área de ele ser visualizadas no modo de escala total (100%).

Como isso pode ser implementado da forma mais performance (tráfego e cpu sábio)? Estamos abertos a qualquer solução, enquanto os restos de arquivo de imagem de alta resolução protegidas. A aplicação é desenvolvida em C # e .NET Framework 3.5.

Todas as idéias? Agradecemos antecipadamente!

Foi útil?

Solução

A primeira coisa que você precisa fazer é compressa e marca d'água nas imagens antes de enviá-los ao servidor. Em seguida, apresentar aqueles para o utilizador. Isso vai demorar menos recursos de CPU, uma vez que as imagens será estático.

Eu, pessoalmente, em seguida, cortar as imagens para as versões de tamanho completo e colocá-los ao lado os comprimidos. Desta forma, o cliente pode ter uma visão da imagem completa (embora comprimido e marca d'água) ao lado de uma pequena amostra da versão completa Hi-Res.

Você provavelmente quer evitar manipulação de imagens on-the-fly, a menos que você tem um baixo número de clientes e um servidor muito musculoso.

Outras dicas

Eu iria servir uma versão de baixa resolução da imagem para o navegador e hava um ui safra lado do cliente que, então, enviar um pedido de volta para o servidor que irá cortar fora a seleção e enviá-lo de volta no res elevado.

Como eu digo ao meu pai (que não entende como a internet funciona), se você pode vê-lo em uma página da web, você pode salvá-lo, é apenas uma questão de como fazê-lo.

Existe uma versão ajax do Deep Zoom que você pode gostar - Veja Dragon:

http://livelabs.com/seadragon-ajax/gallery/

O usuário é apresentado com uma versão de baixa resolução da imagem; eles podem ampliar qualquer parte que eles gostam.

Em primeiro lugar gostaria pré-render versões com marca d'água de todas as imagens em tamanho maior poupança-los em um formato de arquivo comprimido, bem como versões pré-renderizados baixa resolução.

Eu iria servir as imagens de baixa resolução para navegação. Em seguida, a imagem de rés alta marca d'água para o usuário configurar seu cultivo.

No momento da confirmação de que eu teria um segundo servidor de processamento de imagem dedicado que cortou a imagem sem marcas d'água, passou a imagem recortada para o servidor que enviou para o cliente.

Dito isto, ainda seria possível, para criar um script do lado do cliente que cultivado as partes cortadas e costurado-los juntos para criar uma cópia de tamanho completo da imagem sem marcas d'água.

não deve ser disponibilizado para de download de qualquer forma.

está em desacordo com:

O cliente deve ver um downskaled versão da imagem e ser capaz de selecionar uma área de que ele seja visto em o modo de escala total (100%).

... no ponto em que permitem que todas as áreas da imagem para ser visto em pleno res, toda a imagem poderia ser costuradas. então você está efetivamente (se muito inconvenientemente) tornando a imagem em tamanho completo disponível.

nada disso ajuda a alcançar o objetivo embora.

a maneira que eu faria seria para fornecer uma 72dpi marca d'água cópia para uso na seleção da área da imagem para download. você pode escalar a um% do original se a tela imobiliário foi um problema. que o usuário escolher coordenadas parte inferior esquerda-direita-top e. em seguida, usar algo como imagemagick para copiar esta área fora do original para ser servido para o usuário.

Se você precisa para recursos de conserva, você poderia ter o download usuários de uma grade pré-definida, então a primeira vez grade coord 14:11 é escolhido, image_1411_crop.jpg é gravado no sistema de arquivos, e na próxima vez que coord é selecionado, o arquivo já existe.

Editar: ler alguns dos seus comentários sobre outras respostas ...

não importa o caminho que você vai fazer sobre a geração e caching serverside, você vai usar a mesma quantidade de largura de banda e tráfego. um 300dpi JPEG é um 300dpi jpeg não importa se ele acabou de ser gerado ou está sentado no sistema de arquivos.

Você tem que descobrir se você precisa CPU conservar ou espaço em disco. se você tem um milhão de shows de imagens e apenas quarenta usuários, você pode pagar o hit CPU. se você tem quarenta shows de imagens e um milhão de usuários, vá para o HDD.

Eu usaria S3 para armazenamento. Criar dois baldes (público protegido), dar a url a imagens do balde protegidos assim que tiver autorizado o usuário a baixá-los. S3 URLs podem ser feitas tranquila, com uma data de expiração.

Com imagens 15MB provavelmente você vai perceber que você precisa para pré-gerar a versão reduzida / cortada antes do tempo.

Eu usaria uma marca d'água de algum tipo em todos, mas o arquivo original. (Como mapas de Google)

[Edit: Adicionado Deep Zoom para controlar o zoom]

Confira Silverlight Deep Zoom para gerenciar o croping e zoom ( Demonstração ). Eles ainda têm um utilitário para gerar todas as imagens cortadas.

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