2011-01-07 71 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