ASP.NET MVC에서 이미지를 동적으로 크기를 조정하려면 어떻게해야합니까?
-
05-07-2019 - |
문제
의문
ASP.NET MVC에서 이미지를 동적으로 크기를 조정하려면 어떻게해야합니까?
배경
이미 서버에있는 이미지에서 썸네일을 자동으로 만들려고합니다. asp.net webforms에서 나는 a를 만들었다 HTTPHandler
이 작업을 수행하고 동사를 추가합니다 web.config
모든 이미지 확장이 핸들러를 통과 할 수 있도록. 핸들러는 원본 이미지를 원한다면 일반적인 이미지 태그를 사용한다는 점에서 훌륭했습니다.
<img src="pic.jpg"/>
그러나 크기가 큰 이미지를 원한다면 다음을 사용합니다.
<img src="pic.jpg?width=320&height=240"/>
ASP.NET MVC에서 동일한 동작을 복제하는 방법이 있습니까?
해결책
당신은 확실히 똑같이 재사용 할 수 있습니다 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 웹 페이지 (Razor) 사이트에서 이미지 작업.
MVC에서도 똑같이 할 수 있습니다. 이전과 같이 httphandler를 사용하거나 크기가 큰 이미지를 스트리밍하는 동작을 만들 수 있습니다.
그것이 나라면 크기 조정 방법으로 컨트롤러를 만들 것입니다.