/ / Redimensionnement d'image à la volée dans asp.net - c #, asp.net, vignettes, redimensionnement d'image

Redimensionnement d'image à la volée dans asp.net - c #, asp.net, miniatures, redimensionnement d'image

Pour simplifier, disons que j'ai une page Webqui doit afficher des vignettes d'images. Les emplacements des images sont stockés dans une base de données (les images sont stockées sur Amazon S3). Est-il possible que mon serveur Web réduise la grande image avant de la livrer au client? De cette façon, je n'ai pas besoin de stocker les vignettes de chaque image et le client peut télécharger un fichier plus petit.

Réponses:

1 pour la réponse № 1

Bien sûr pas de problème. Il existe de nombreuses ressources sur le Web qui montrent comment préparer une image à partir d'une base de données. Je ne vais donc pas la reproduire ici.

Une fois que vous avez chargé l'image, vous pouvez facilement la réduire à l'aide de .NET. Il y a un exemple à l'URL suivante. Elle ne fait pas exactement ce que vous faites, mais elle génère des miniatures d'une image.

http://blackbeltcoder.com/Articles/graphics/creating-website-thumbnails-in-asp-net


9 pour la réponse № 2

Chaque tutoriel sur ce sujet simplifie exagérément la situation et presque tout d'entre eux fuient la mémoire. C'est une longue lecture, mais à savoir sur les 29 pièges du redimensionnement d'image afin que vous puissiez les éviter.

je écrit une bibliothèque pour redimensionner les images dynamiques côté serveur en toute sécurité. Ce n'est pas quelque chose qui peut être fait correctement1 tutoriel ou même 10. Vous pouvez résoudre 80% des bugs, mais pas 100%. Et lorsque vous faites quelque chose d'aussi gourmand en ressources, vous ne pouvez pas tolérer de bogues ou de fuites de mémoire.

La bibliothèque principale est gratuite et open-source, maisLe plugin Amazon S3 fait partie de l'édition Performance, qui a des frais de licence de 249 $. L'édition Performance est fournie avec des sources, des exemples et une documentation pour l'intégration S3, MS SQL, Azure, MongoDB GridFS et CloudFront, ainsi que la mise en cache et la mémoire cache du disque à l'échelle du téraoctet.

D'après les statistiques auxquelles j'ai accès, il apparaîtque imageresizing.net est la bibliothèque de ce type la plus utilisée. Il gère au moins 5 réseaux sociaux et est utilisé avec des collections d'images pouvant atteindre 20 To. La plupart des grands sites utilisent le plugin S3, car le stockage local (ou même un SAN) n'est pas très évolutif.


1 pour la réponse № 3

En utilisant WebImage classe qui vient System.Web.Helpers.WebImage vous pouvez y parvenir.

Vous pouvez utiliser cet enfant génial pour produire des images redimensionnées à la volée.

Exemple de code:

public void GetPhotoThumbnail(int realtyId, int width, int height)
{
// Loading photos’ info from database for specific Realty...
var photos = DocumentSession.Query<File>().Where(f => f.RealtyId == realtyId);

if (photos.Any())
{
var photo = photos.First();

new WebImage(photo.Path)
.Resize(width, height, false, true) // Resizing the image to 100x100 px on the fly...
.Crop(1, 1) // Cropping it to remove 1px border at top and left sides (bug in WebImage)
.Write();
}

// Loading a default photo for realties that don"t have a Photo
new WebImage(HostingEnvironment.MapPath(@"~/Content/images/no-photo100x100.png")).Write();
}

Plus à ce sujet ici: Redimensionner l'image à la volée avec ASP.NET MVC


Voici un excellent didacticiel qui montre comment travailler avec WebImage directement depuis le site ASP.NET:

Utilisation d'images dans un site de pages Web ASP.NET (Razor)


0 pour la réponse № 4

Oui.

Vous créez une page ASP.Net qui répond.Clear (), définit l'en-tête Content-Type-dans Response et envoie les données binaires de l'image (également via Response). L'image peut être redimensionnée à la volée, mais je "recommande de la mettre en cache pendant un certain temps sur le disque. Vous référencez ensuite l'image à partir du code HTML en tant que <img src =" / images / http: // server / yourimagepage. aspx ">. Pour stocker l'image en mémoire avant de l'envoyer, vous pouvez utiliser MemStream.

J'ai un exemple de code mais pas devant moi en ce moment, désolé. :)