Question

nous maintaing une base de données de médias d'images dans une grande webapplication à grande échelle. Les jpgs haute résolution sont grandes (> 15 Mo) et ne doivent pas être mis à disposition pour le téléchargement de quelque façon. Maintenant, nous devons donner accès aux détails (cultures) des images aux clients (comme une fonction de zoom-in). Le client doit voir une version downskaled de l'image et être en mesure de sélectionner une zone de celui-ci à visualiser en mode pleine échelle (100%).

Comment cela pourrait-il être mis en œuvre de la manière la plus performante (trafic et sage cpu)? Nous sommes ouverts à toute solution tant que le fichier image haute résolution reste protégée. L'application est développée en C # et .NET Framework 3.5.

Toutes les idées? Merci d'avance!

Était-ce utile?

La solution

La première chose que vous devez faire est de compresser et filigrane les images avant de les télécharger sur le serveur. Présentez ensuite ceux à l'utilisateur. Cela prendra le moins de ressources CPU, car ils seront les images statiques.

Personnellement, je puis recadrer les images pour les versions complètes de taille et de les mettre en place le long du côté les comprimés. De cette façon, le client peut avoir une vue de l'image complète (quoique comprimé et filigrané) le long du côté d'un petit échantillon de la version complète salut-res.

Vous voulez probablement éviter sur la volée manipulation d'images, sauf si vous avez un faible nombre de clients et un serveur très costaud.

Autres conseils

Je servais une version basse résolution de l'image dans le navigateur et Hava une interface de culture côté client qui serait ensuite envoyer une demande au serveur qui affleurent la sélection et le renvoyer en haute résolution.

Comme je l'ai dit à mon père (qui ne comprend pas comment fonctionne Internet), si vous pouvez le voir sur une page Web, vous pouvez l'enregistrer, il est juste une question de savoir comment le faire.

Il existe une version ajax de Deep Zoom que vous pourriez aimer - Voir dragon:

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

L'utilisateur est présenté avec une version basse résolution de l'image; ils peuvent zoomer sur une partie de ce qu'ils aiment.

Tout d'abord je pré-rendu versions tatouées de toutes les images en taille réelle pour les enregistrer dans un format de fichier compressé, ainsi que des versions pré-rendu basse rés.

Je servirais les images basse résolution pour la navigation. Ensuite, l'image de haute résolution filigrané pour l'utilisateur de mettre en place leur culture.

Je Au moment de la confirmation un deuxième serveur de traitement d'image dédié qui recadrée l'image non filigrané, passé l'image recadrée pour le serveur web qui a envoyé au client.

Cela étant dit, il serait encore possible, pour créer un script côté client qui cultivaient parties tronquées et les stiched ensemble pour créer une copie de pleine taille de l'image non filigrané.

  

ne doit pas être mis à disposition pour   télécharger de quelque façon.

est en contradiction avec:

  

Le client doit voir un downskaled   version de l'image et pouvoir   sélectionner une zone de celui-ci à visualiser dans   le mode à pleine échelle (100%).

... au point vous permettent tous les domaines de l'image à visualiser à pleine résolution, l'image entière pourrait être cousues ensemble. de sorte que vous êtes effectivement (si elle est très incommode) qui rend l'image en taille réelle disponible.

rien de tout cela vous aide à atteindre l'objectif que.

la façon dont je le ferais serait de fournir une copie 72dpi filigrané pour une utilisation dans le choix de la zone de l'image pour télécharger. vous pourriez l'échelle à un% de l'original si l'écran immobilier était un problème. demandez à l'utilisateur de choisir les coordonnées haut à gauche et en bas à droite. puis utiliser quelque chose comme ImageMagick pour copier cette zone de l'original pour être servi à l'utilisateur.

si vous avez besoin de conserver les ressources, vous pourriez avoir les utilisateurs de télécharger à partir d'une grille prédéfinie, de sorte que la première grille de temps coord 14h11 est choisi, image_1411_crop.jpg écrites sur le système de fichiers, et la prochaine fois que coord est sélectionné, le fichier existe déjà.

modifier lire certains de vos commentaires sur d'autres réponses ...

, peu importe de quelle façon vous allez sur la production et la mise en cache de Serverside, vous allez utiliser la même quantité de bande passante et du trafic. 300dpi jpeg 300dpi jpeg, peu importe si elle vient d'être généré ou est assis sur le système de fichiers.

vous devez savoir si vous devez économiser de l'espace disque ou CPU. si vous avez un million de concerts d'images et seulement quarante utilisateurs, vous pouvez vous permettre le succès du processeur. si vous avez quarante concerts d'images et un million d'utilisateurs, optez pour le disque dur.

J'utilise S3 pour le stockage. Créer deux seaux (protection du public), donner url aux images du seau protégé une fois que vous avez autorisé l'utilisateur à les télécharger. S3 urls peut être reconstituante, avec une date d'expiration.

Avec des images 15Mb vous aurez probablement réaliser que vous avez besoin d'effectuer une pré-générer la version mise à l'échelle / rognée à l'avance.

J'utilise un filigrane de quelque sorte sur tous, mais le fichier original. (Comme les cartes Google)

[Edit: Ajout Deep Zoom pour zoomer]

Consultez Silverlight Deep Zoom pour la gestion du croping et le zoom ( Demo ). Ils ont même un utilitaire pour générer toutes les images recadrées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top