图像在asp.net中动态resize

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

好没问题。 网络上有大量资源可以显示如何从数据库中提取图像。 所以我不会在这里重复。

加载图像后,可以使用.NET轻松缩小图像。 以下URL有一个示例。 它不能完全按照您的操作进行操作,但它会生成图像的缩略图。

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

关于该主题的每个教程都过度简化了这种情况,几乎所有这些教程都会泄漏内存。 这是一个很长的阅读,但你应该知道29图像resize的陷阱,所以你可以避免它们。

我写了一个库来安全地进行服务器端动态图像大小调整 。 这不是可以在1个教程甚至10中正确完成的事情。你可以解决80%的错误,但不是100%。 当你正在做一些资源密集型的事情时,你无法忍受错误或内存泄漏。

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

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

使用System.Web.Helpers.WebImage WebImage类可以实现此目的。

您可以使用这个好孩子动态输出resize的图像。

示例代码:

 public void GetPhotoThumbnail(int realtyId, int width, int height) { // Loading photos' info from database for specific Realty... var photos = DocumentSession.Query().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(); } 

更多关于它: 使用ASP.NET MVC动态调整图像大小


这是一个很棒的教程,展示了如何直接从ASP.NET站点使用WebImage

使用ASP.NET网页(Razor)站点中的图像

是。

您创建一个执行Response.Clear()的ASP.Net页面,在Response中设置Content-Type-header并发送图像的二进制数据(也通过Response)。 图像可以即时resize,但我建议在磁盘上将其缓存一段时间。 然后,您将HTML中的图像引用为。 要在发送之前将图像存储在内存中,可以使用MemStream。

我有示例代码,但现在不在我面前,抱歉。 🙂