Pregunta

estamos maintaing una base de datos de los medios de imagen en una aplicación web a gran escala. Los archivos JPG de alta resolución son grandes (> 15 MB) y no deben estar disponibles para su descarga en modo alguno. Ahora tenemos que proporcionar acceso a los detalles (cultivos) de las imágenes a los clientes (como una función de zoom-in). El cliente debe ver una versión downskaled de la imagen y ser capaz de seleccionar un área de la misma pueda ser visualizada en el modo de escala completa (100%).

¿Cómo pudo ser implementado en la forma mas potente (el tráfico y la CPU en cuanto a)? Estamos abiertos a cualquier solución, siempre que el archivo de imagen de alta resolución permanece protegido. La aplicación está desarrollada en C # y .NET Framework 3.5.

¿Alguna idea? Gracias de antemano!

¿Fue útil?

Solución

Lo primero que tendrá que hacer es comprimir y marca de agua de las imágenes antes de subirlos al servidor. Luego presente aquellos para el usuario. Esto tomará menos recursos de CPU, ya que las imágenes serán estáticas.

Yo personalmente después recortar las imágenes para las versiones de tamaño completo y ponerlos junto a los formatos comprimidos. De esta manera el cliente puede tener una vista de la imagen completa (aunque comprimido y con marcas de agua) al lado de una pequeña muestra de la versión de alta resolución completa.

Es posible que desee evitar la manipulación de imágenes sobre la marcha a menos que tenga un bajo número de clientes y un servidor muy carnosos.

Otros consejos

Me gustaría servir a una versión de baja resolución de la imagen en el navegador y hava una interfaz de usuario de cultivos lado del cliente, que luego enviar una petición de vuelta al servidor que recortar la selección y devolverla en el alto res.

Como he dicho a mi padre (que no entiende cómo funciona Internet), si se puede ver que en una página web, se puede guardar, es sólo una cuestión de cómo hacerlo.

Hay una versión de Deep Zoom ajax que te pueden gustar - Ver Dragón:

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

El usuario se presenta con una versión de baja resolución de la imagen; luego puede hacer zoom sobre cualquier parte de ella que les gusta.

En primer lugar me preprocese versiones con marcas de agua de todas las imágenes a tamaño completo tiene guardados en un formato de archivo comprimido, así como las versiones pre-renderizados de baja resolución.

Me gustaría servir a las imágenes de baja resolución para la navegación. A continuación, la imagen de alta resolución con marcas de agua para el usuario configurar su recorte.

En el momento de la confirmación me gustaría tener un segundo servidor de procesamiento de imágenes dedicado que recorta la imagen sin marca de agua, pasó la imagen recortada al servidor web, que lo envió al cliente.

Dicho esto, todavía sería posible, para crear un script del lado del cliente que cultiva las partes recortadas y los cosido juntos para crear una copia de tamaño completo de la imagen sin marca de agua.

  

No debe ser puesto a disposición de   descarga de ninguna manera.

está en desacuerdo con:

  

El cliente debe ver a un downskaled   versión de la imagen y poder   seleccionar un área de la misma para ser visto en   el modo de escala completa (100%).

... en el punto de permitir todas las áreas de la imagen para ser visto a plena resolución, toda la imagen podría ser cosidas. por lo que es efectivamente (si es muy inconvenientemente) haciendo que la imagen a tamaño completo.

nada de esto ayuda a alcanzar la meta sin embargo.

la forma en que lo haría sería proporcionar una copia de marca de agua de 72 ppp para su uso en la selección de la zona de la imagen para descargar. usted podría escalar a un% de la original si espacio en pantalla era un problema. tiene el usuario elija coordenadas superior izquierda e inferior derecha. a continuación, utilizar algo así como ImageMagick para copiar esta área fuera del original para ser servido al usuario.

si es necesario conservar los recursos, podría tener los usuarios descargar de una cuadrícula predefinida, por lo que la primera vez que se elige coord rejilla 14:11, image_1411_crop.jpg escribe la entrada al sistema de archivos, y la próxima vez que es coord seleccionado, el archivo ya existe.

editar leer algunos de sus comentarios en otras respuestas ...

no importa qué manera de ir sobre la generación y almacenamiento en caché serverside, usted va a utilizar la misma cantidad de ancho de banda y el tráfico. un archivo JPEG 300dpi es un archivo JPEG 300dpi no importa si acaba de ser generada o está sentado en el sistema de archivos.

usted tiene que averiguar si lo que necesita para conservar la CPU o espacio en disco. Si usted tiene un millón de gigas de imágenes y sólo cuarenta usuarios, puede permitirse el éxito de la CPU. si tienes cuarenta gigas de imágenes y un millón de usuarios, a por el disco duro.

S3 para su almacenamiento. Crear dos cubos (pública protegida), dar a conocer url para imágenes del cubo protegida una vez que haya autorizado el usuario para descargarlos. S3 Urls puede hacerse reparador con una fecha de caducidad.

Con imágenes 15Mb es probable que darse cuenta de que lo que necesita comprobar la validez de generar la versión reducida / recortada antes de tiempo.

que haría uso de una marca de agua de algún tipo en todos menos en el archivo original. (Como los mapas de Google)

[Editar: Añadido Deep Zoom para hacer zoom]

Salida Silverlight Deep Zoom para la gestión de la croping y zoom ( demostración ). Incluso tienen un para generar todas las imágenes recortadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top