2011-01-07 66 views
2

为了简单起见,可以说我有一个需要显示图像缩略图的网页。图像位置存储在数据库中(图像存储在Amazon S3上)。是否有可能让我的Web服务器在传送到客户端之前缩小大图像?这样我就不必存储每个图像的缩略图,客户端可以下载更小的文件。在asp.net中动态调整图片的尺寸

+0

只是要注意的是,完整的图像将始终需要转移,唯一的区别是人就会将其往下拉电线。这就是说,你可以实现一个`HttpHandler`,它可以为你做图像处理。 – 2011-01-07 19:33:14

+2

您提到您的映像位于S3上 - 您的应用程序是在单个服务器上运行,还是在云应用程序中运行?如果要在单台服务器上运行应用程序,那么装载大图像并重新调整大小并不一定需要。如果尚未创建缩略图,则可能只想创建一个缩略图,然后将其存储在磁盘上,以便不必在图像上再次运行代码,除非其更改。 – BenAlabaster 2011-01-07 19:35:40

回答

0

是的。

你做一个ASP.Net页面,做Response.Clear(),在响应中设置Content-Type-header并发送图像的二进制数据(也通过响应)。图像可以随时调整大小,但我建议在磁盘上缓存一段时间。然后,您将HTML中的图像引用为< img src =“http://server/yourimagepage.aspx”>。为了在发送之前将图像存储在内存中,您可以使用MemStream。

我有示例代码,但不在我面前现在,对不起。 :)

9

关于此主题的每个教程都过度简化了这种情况,其中几乎全部都泄漏了内存。这是一个很长的阅读,但you should know about the 29 image resizing pitfalls所以你可以避免它们。

I wrote a library to do server-side dynamic image resizing safely。这不是在1个教程甚至10个程序中都能正确完成的事情。您可以解决80%的错误,但不是100%。当你做这些资源密集型的事情时,你不能容忍错误或内存泄漏。

核心库是免费且开源的,但Amazon S3插件是Performance版本的一部分,它有249美元的许可费用。 Performance Edition附带了S3,MS SQL,Azure,MongoDB GridFS和CloudFront集成的源代码,示例和文档,以及TB级磁盘缓存和memcaching。

从我可以访问的统计数据看来,imageresizing.net是同类中使用最广泛的库。它运行至少5个社交网络,并与图像集合一起使用,大小可达20TB。大多数大型网站都使用S3插件,因为本地存储(甚至是SAN)的扩展性不是很好。

1

使用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(); 
} 

更多在这里:Resize image on the fly with ASP.NET MVC


这是一个伟大的教程,展示了如何使用WebImage直接从ASP工作。NET网站:

Working with Images in an ASP.NET Web Pages (Razor) Site