[英]How to convert a base64 dataUri to Uint8ClampedArray without using HTML5 Canvas?
[英]Convert an image to base64 without using HTML5 Canvas
首先,有一点背景:
对于此序言的冗长性,我提前表示歉意。 但是,它可能有助于提供一种并非针对问题性质的替代解决方案。
我有一个使用嵌入式WinForm UserControls的ASP.NET MVC应用程序。 这些控件通过Microsoft.Ink
库为TabletPC提供“墨水覆盖”支持。 由于IE8企业标准,它们是不幸的必需品。 否则,HTML5 Canvas将是解决方案。
无论如何,图像URL通过<PARAM>
传递到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秒……不理想)。 正在做Image img = new Bitmap(url);
由于FileIO权限问题(无论是否完全信任,我都无法成功消除该问题),因此UserControl
则无法在这种情况下使用。
初始解决方案
即使使用canvas
不是当前的选择,我还是决定使用它来测试解决方案。 我将在javascript中加载每个图像,然后使用canvas
和toDataUrl()
获取base64数据。 然后,我没有将URL传递给UserControl
并让它完成所有工作,而是将base64数据作为<PARAM>
传递。 然后,它将数据快速转换回图像。
15张图像的15秒现在不到3秒。 因此,我开始寻找在IE7 / 8中工作的image-> base64解决方案。
以下是一些其他要求/限制:
希望我提供了足够的信息,也感谢您能提供的任何指导。
谢谢。
您可以使用任何FlashCanvas,fxCanvas或excanvas库,这些库在旧的Internet Explorer版本中使用Flash或VML模拟画布。 我相信所有这些都提供了Canvas API中的toDataURL
方法,使您能够获取图像的编码表示形式。
经过广泛的挖掘(我使用的是相同的修补程序),我相信这是唯一的解决方案,只需编写可将图像发送到的PHP脚本即可。 当然,问题在于,除非满足以下三个条件之一,否则无法将图像发送到PHP脚本:
Uint8Array
) sendAsBinary
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.