Comment puis-je redimensionner de manière dynamique une image dans ASP.NET MVC? P>
J'essaie de créer automatiquement des vignettes à partir d'images déjà sur le serveur. Dans ASP.NET WebForms, j'ai créé un Mais si vous vouliez une image redimensionnée, vous utiliseriez: p>
existe-t-il un moyen de dupliquer le même comportement dans ASP.NET MVC? P> httphandler code> pour le faire et ajouté verbes dans le
web.config code> pour toutes les extensions d'image pour traverser le gestionnaire. Le gestionnaire était agréable dans ce que si vous vouliez l'image d'origine, vous utiliseriez une étiquette d'image typique: p>
code> p>
code> p>
3 Réponses :
Vous pouvez faire la même chose en MVC. Vous pouvez utiliser un HTTPHANDLER comme vous l'avez fait avant ou vous créez une action qui diffuse l'image redimensionnée. p>
Si c'était moi, je créerais un contrôleur avec une méthode de redimensionnement. P>
Pouvez-vous élaborer sur ce que vous avez dit sur la création d'une action qui diffuse l'image redimensionnée?
Attends, je pense que je l'obtiens. Vous voulez utiliser RedirectToaction ("Thumbnail") qui retourne une vignette, non?
Je ne suis pas chez mon ordinateur, mais il existe une méthode de "contenu" qui diffuse des données. Je crois que cela a une signature qui prend un tableau de flux ou d'octet, puis a un paramenteur pour le type de contenu. Pour le type de contenu, vous passeriez "image / jpg". Ensuite, tout ce dont vous avez besoin est de faire référence à l'action dans un élément d'image HTML.
Ce qui précède suppose que vous avez déjà redimensionné l'image en mémoire comme un ruisseau OY Oyte []
Je préférerais beaucoup la vue de redimensionner l'image. Mon opinion est que le contrôleur ne doit donner qu'à l'affichage d'une "table" de données à afficher, dans ce cas, une liste de toutes les images correspondant à un critère, et c'est le travail de la vue pour gérer l'image de redimensionnement, si nécessaire.
Si vous allez descendre une réponse, la courtoisie est de laisser un commentaire. C'est un peu absurde de descendre une réponse écrite il y a 3 ans. La valeur de déplacement est ajoutée en fournissant votre propre réponse.
Vous pouvez définitivement réutiliser le même dans vos itinéraires, ajoutez: p> maintenant toute demande dans ihttphandler code>. Vous avez juste besoin d'un nouveau IrouteHandler à map La demande entrante au bon gestionnaire:
/ images < / Code> (par exemple,
/images/pic.jpg?width=320&height=240 code>) sera géré par votre gestionnaire existant. Évidemment, vous pouvez changer le modèle de route pour correspondre à n'importe quel chemin qui a du sens, comme un itinéraire MVC typique. P> P>
Ce code fonctionnera-t-il pour les sous-répertoires sous le dossier Images?
@Danielt Oui! Voir la petite modification à ma réponse - Ajout de l'astérisque à {* Fichier} Code> aura cette route tout attraper sous / Images, y compris les sous-répertoires.
Hmm, léger problème: ce routage ne fonctionne que si je saisis manuellement l'URL dans la barre d'adresse, comme: http: // localhost: 4692 / contenu / images / img_0146.jpg code>. Cependant, j'ai besoin d'intégrer l'image à l'intérieur d'une vue et il ne passe pas le gestionnaire de routage car il a déjà été acheminé vers le contrôleur.
@Danielt hmm, pas sûr de ce que tu veux dire. Chaque ressource sur la page, telle que , est envoyée au serveur par le navigateur comme une demande distincte, et chacune sera traitée séparément. Pouvez-vous décrire ce que vous voyez plus en détail?
Qu'en est-il des images qui sont en CSS comme images d'arrière-plan?
Utilisation de Vous pouvez utiliser ce grand enfant pour produire des images redimensionnées à la volée . p> échantillon code: p> dans une vue, vous auriez quelque chose comme ceci: p> WebImage CODE> Classe qui se trouve dans
system.web.helpers.webimage code>
Vous pouvez y parvenir. <img src="@Url.Action("GetPhotoThumbnail",
new { realtyId = item.Id, width = 100, height = 100 })" />
Contrairement à un HTTPHANDLER, un httpmodule fonctionnera de manière transparente avec MVC et WebForms. L'image la plus populaire Redimensionnement HTTPMODULE pour ASP.NET est Imageresizing.net . C'est gratuit, open-source et infaillible.
Cool merci. Malheureusement, Imageresizing.net n'était pas là en 2009 quand j'ai posé la question.
C'était en fait. Été autour depuis 2007. Mais dans toute l'équité, cela n'a pas compris la page 1 de Google jusqu'au début de 2009 ...