Как динамически изменять размер изображения в ASP.NET MVC?
вопрос
как динамически изменять размер изображения в ASP.NET MVC?
фон
Я пытаюсь автоматически создавать миниатюры изображений, которые уже находятся на сервере. В ASP.NET Webforms, я создал HTTPHandler
для этого и добавлены глаголы в web.config
для всех расширений изображений, проходящих через обработчик. Обработчик был хорош в том, что если вы хотите оригинальное изображение, вы будете использовать типичное изображение тег:
<img src="pic.jpg"/>
но если вы хотите изменить размер изображения, вы бы использовали:
<img src="pic.jpg?width=320&height=240"/>
есть ли способ дублировать одно и то же поведение в ASP.NET MVC?
3 ответов
вы можете определенно повторно использовать то же самое IHttpHandler
. Вам просто нужен новый IRouteHandler чтобы отобразить входящий запрос на правильный обработчик:
public class ImageRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new YourImageHttphandler();
}
}
в ваших маршрутах добавьте:
routes.Add("Images", new Route("images/{*file}", new ImageRouteHandler()));
теперь любой запрос в /images
(например,/images/pic.jpg?width=320&height=240
) будет обрабатываться вашим существующим обработчиком. Очевидно, вы можете изменить шаблон маршрута, чтобы соответствовать любому пути, который имеет смысл, как и типичный маршрут MVC.
используя WebImage
класс, который входит System.Web.Helpers.WebImage
вы можете добиться этого.
вы можете использовать этот отличный ребенок для вывода измененных изображений на лету.
пример кода:
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();
}
в тебе есть что-то вроде этого:
<img src="@Url.Action("GetPhotoThumbnail",
new { realtyId = item.Id, width = 100, height = 100 })" />
подробнее об этом здесь:изменение размера изображения на лету с ASP.NET MVC
есть также отличный учебник по ASP.NET сайт:работа с изображениями в ASP.NET веб-страницы (Бритва) Сайт.
вы можете сделать то же самое в MVC. Вы можете использовать httphandler, как и раньше, или создать действие, которое передает измененное изображение.
Если бы это был я, я бы создал контроллер с методом изменения размера.