2009-12-03 42 views
1

我從我小的調整,顯示一個網頁,我打算打印在數據庫中的用戶上載圖像拉動。我想在用戶上傳時保存一個較小的版本,但由於這個文檔的設計還沒有最終確定,我正在尋找更具動態性的東西。此外,該文檔只需打印一次,而上傳的圖像會多次顯示在應用程序的各個位置。使用asp.net從數據庫中裝載它後調整圖像大小,C#

使用JavaScript來調整它的大小,同時保持它的比例,這是印刷精美一會兒。爲樣式添加邊距後,打印機開始以全尺寸打印圖像。我假設這是保證金。它在屏幕上看起來不錯,但會將所有內容從紙上推下。

這讓我想到在C#代碼中調整服務器上的大小,但我們使用上傳到數據庫的用戶映像,並且我似乎無法在頁面生命週期中找到合適的時間或地點訪問並更改寬度和高度。我已經使用Bitmaps嘗試了網絡上的各種方法,但是當我使用FileDownloader頁面作爲圖像url時,它們都需要一個文件。

也許我期待在完全錯誤的地方,需要回去給客戶端。建議和幫助表示讚賞。

+0

你的情況很常見。這是[我爲這個動態圖像調整大小模塊寫的](http://imageresizing.net)。實際上,甚至有一個SQL插件。在[email protected]發郵件給我,我很樂意爲您提供幫助。 – 2011-05-28 16:20:04

回答

0

只要您的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的前開放,我只是避風港」現在,它已經過了很長一段時間了(因爲我在這個問題中存儲了大多數其他大小的圖像 - 我也這樣做了,但是我意識到這不適合你)

0

你能實現這樣一個過程:

  • 用戶發送圖像
  • 圖像是由函數/程序/腳本打開,而用戶等待
  • 圖像的尺寸上飛和保存在正確的位置返回成功的代碼
  • 用戶收到一條消息,具體取決於腳本的返回值。

編輯:

我同意大多數你來到這裏的答覆。

如果圖片存儲在數據庫中,您需要首先爲所有圖片製作縮略圖並放入同一個數據庫,然後您需要實現一個過程,以便在添加新圖片時即時創建縮略圖。

+0

對不起,我想我應該解釋一下我動態調整大小的動機。我編輯了我的問題。 – Coronus 2009-12-03 17:17:19

+0

你有一段代碼嗎?我不是ASP.Net的專家,我想看看我能否設法從您正在使用的課程中編寫一個文件。 – BlueTrin 2009-12-03 17:40:40

0

當你將不得不將圖像調整到已知的限制,而且也必須是多次做,我一直主張做一次調整大小(上載)和存儲結果的可能性。當然,你並不是說你需要保留原始圖像的大小,但是如果你這樣做了,那麼你只需要將圖像存儲兩次 - 一次是原始大小,一次是調整後的大小。

一旦你做到了這一點,你可以不用擔心定義基於調整後的圖像的已知尺寸打印佈局,而不必faff關於變更每次使用。

0

我建議轉換上載,並可能節省的情況下,你希望讓用戶通過點擊完整的圖像兩個圖像。使用此模型,您只能進行一次轉換,並可以渲染任意大小的圖像。對Image類的GetThumbnailImage()方法將你的願望是什麼,這樣的事情:

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

一定要檢查該文檔的參數GetThumbnailImage()來驗證縮放問題和回調處理。

0

聲明:我建議我爲此目的設計的開源庫。我肯定有偏見,但4年和成千上萬的快樂用戶證明我的偏見:)

你不應該在.ASPX頁面內調整圖像大小,或者爲它們提供服務。圖像應該由HttpModule在不同的請求中處理,因此響應不會受到影響。

如果在SQL某種ID的每一個形象,你可以使用the SqlReader的VirtualPathProvider,使其可通過網址訪問,例如/ sqlimages/ID

再加上this free, open-source dynamic image resizing module,和你設置。

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

如果你編寫自己的解決方案,read these 28 pitfalls you should avoid,所以你最終不會崩潰服務器。

希望這會有所幫助!

相關問題