簡體   English   中英

使用asp.net,C#從數據庫加載圖像后調整圖像大小

[英]Resizing an image after loading it from the database using asp.net, C#

我從數據庫中提取了一個用戶上傳的圖像,該圖像正在調整大小,以顯示在要打印的網頁上。 我曾考慮過在用戶上傳時保存一個較小的版本,但是由於該文檔的設計尚未完成,因此我一直在尋找更具動態性的東西。 同樣,此文檔只需要打印一次,而上傳的圖像會在應用程序的各個位置多次顯示。

使用javascript調整其大小,同時保持其比例,它可以打印一會兒。 添加樣式余量后,打印機開始以原尺寸打印圖像。 我假設這是保證金。 它在屏幕上看起來不錯,但將所有內容從紙上推開。

這使我開始考慮使用C#代碼在服務器上調整其大小,但是我們使用上載到數據庫的用戶圖像,因此我似乎找不到正確的時間或位置來訪問和更改頁面生命周期。寬度和高度。 我已經在網上使用位圖嘗試了各種方法,但是當我使用FileDownloader頁面作為圖像URL時,它們都想要一個文件。

也許我完全在錯誤的地方尋找,需要回到客戶那里。 意見和幫助表示贊賞。

您能否實施這樣的過程:

  • 用戶發送圖像
  • 當用戶等待時,通過函數/例程/腳本打開圖像
  • 即時調整圖像大小並保存在正確的位置,這將返回成功的代碼
  • 用戶收到一條消息,具體取決於腳本的返回值。

編輯:

我同意您收到的大多數答復。

如果圖片存儲在數據庫中,則需要首先為所有圖片制作縮略圖,並將它們放在同一數據庫中,然后,在添加新圖片時,您需要實現一個流程來動態創建縮略圖。

當您需要將圖像調整大小到已知的限制,並且有可能不得不多次進行調整時,我總是主張一次調整大小(在上傳時)並存儲結果。 當然,您不必說您需要保留原始圖像的大小,但是如果您這樣做,則只需將圖像存儲兩次-一次存儲原始大小,一次存儲在調整大小的尺寸上。

完成此操作后,您就不必擔心根據調整大小后的圖像的已知尺寸來定義打印布局,而不必費心每次使用大小調整。

我建議您進行上載轉換,並可能保存兩個圖像,以防您想讓用戶點擊查看完整圖像。 使用此模型,您只需進行一次轉換即可渲染任何尺寸的圖像。 Image類上的GetThumbnailImage()方法將執行您想要的操作,如下所示:

String imageFile = uploadedFileName;
Image baseImage = Image.FromFile(imageFile);
Image thumbImage = baseImage.GetThumbnailImage(300,300,..., ...);
SaveMyImage(baseImage);
SaveMyImage(thumbImage);

確保檢查文檔中的GetThumbnailImage()參數,以驗證擴展問題和回調處理。

只要您的FileDownloader頁面返回正確的調整大小圖像,就不必指向實際圖像也沒關系。

我在您的FileDownloader頁面(偽代碼)中是這樣的:

using (Image img = LoadImageFromDatabase())
{
    using (Image resized = ResizeImage(img))
    {
        Response.Clear();
        // Set proper headers
        using (MemoryStream ms = new MemoryStream())
        {
            resized.Save(ms); // maybe the function isn't called Save, can't remember a 100%
            ms.Seek(0); // Can't remember if this is necessary
            Response.BinaryWrite(ms);
        }
    }
}

就像我提到的那樣,它是高度偽代碼,但是在打開Visual Studio的情況下應該很簡單,我現在暫時無法訪問它,而且自上次使用以來已經有一段時間了(因為我存儲了調整后的大小像該問題中的大多數其他圖像一樣,我們建議使用-我也這樣做,但是我意識到這不是您的選擇)

免責聲明:我建議我為此目的設計的開源庫。 我肯定有偏見,但是4年和成千上萬的滿意用戶證明了我的偏見:)

您不應該在.ASPX頁面中調整圖像的大小,也不應該為其提供圖像。 圖像應由HttpModule在單獨的請求中處理,因此不會影響響應能力。

如果在SQL中每個圖像都有某種ID,則可以使用SqlReader VirtualPathProvider使其通過URL(例如/ sqlimages / id)進行訪問

將其與這個免費的開源動態圖像調整大小模塊結合起來 ,就可以開始工作了。

您只需從HTML引用這樣的圖像: http:// localhost / sqlimages / id?width = 300&height = 200 ,甚至不必編寫C#行。

如果您編寫自己的解決方案,請閱讀應該避免的這28個陷阱 ,以免最終導致服務器崩潰。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM