首先,一點背景爲Base64:轉換的圖像,而無需使用HTML5畫布
我道歉的時間,這篇序言的長篇大論性質進取;然而,它可能有助於提供一個與問題性質無關的替代解決方案。
我有一個使用嵌入式WinForm UserControls的ASP.NET MVC應用程序。這些控件通過Microsoft.Ink
庫爲TabletPC提供「墨水覆蓋」支持。由於IE8企業標準,它們是不幸的必需品;否則,HTML5 Canvas將是解決方案。
無論如何,通過<PARAM>
將圖像URL傳遞給InkPicture
控件。
<object VIEWASEXT="true" classid="MyInkControl.dll#MyInkControl.MyInkControl"
id="myImage" name="myImage" runat="server">
<PARAM name="ImageUrl" value="http://some-website/Content/images/myImage.png" />
</object>
在UserControl
各個屬性採用該URL,調用一個執行HttpWebRequest
的方法,以及返回的圖像被放置在InkPicture
。
public Image DownloadImage(string url)
{
Image _tmpImage = null;
try
{
// Open a connection
HttpWebRequest _HttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
_HttpWebRequest.AllowWriteStreamBuffering = true;
// use the default credentials
_HttpWebRequest.Credentials = CredentialCache.DefaultCredentials;
// Request response:
System.Net.WebResponse _WebResponse = _HttpWebRequest.GetResponse();
// Open data stream:
System.IO.Stream _WebStream = _WebResponse.GetResponseStream();
// convert webstream to image
_tmpImage = Image.FromStream(_WebStream);
// Cleanup
_WebResponse.Close();
}
catch (Exception ex)
{
// Error
throw ex;
}
return _tmpImage;
}
問題
這工作,但在這一過程中顯著延遲我的網頁上加載大量的開銷(15幅拍攝了15秒不理想)。在UserControl
中執行Image img = new Bitmap(url);
在這種情況下無法工作,因爲FileIO權限問題(完全信任與否,我一直沒有成功解決該問題)。
初步解決方案
即使使用canvas
不是當前選項,我決定用它來測試解決方案。我會加載每個圖像在JavaScript中,然後使用canvas
和toDataUrl()
獲取base64數據。然後,我不是將URL傳遞給UserControl
,而是讓它完成所有工作,我將base64數據作爲<PARAM>
來代替。然後它將數據快速轉換回圖像。
對於15幅圖像15秒現在少於3秒。因此,我開始尋找在IE7/8中工作的image-> base64解決方案。
這裏有一些額外的要求/限制:
- 溶液不能有外部依賴性(即$ .getImageData)。
- 它需要100%封裝,因此可以攜帶。
- 圖像的來源和數量是可變的,它們必須是URL格式(base64數據預先不是選項)。
我希望我已經提供了足夠的信息,我很欣賞你能給的任何方向。
謝謝。
的可能的複製上傳[轉換圖像,而不畫布爲Base64] (http://stackoverflow.com/questions/193 10997 /轉換圖像到的base64無帆布) – JNF