Awesomium如何保存加载的图像而无需重新下载 [英] Awesomium how save a loaded image without redownload it
问题描述
如何在 Awesomium 浏览器中将加载的图像复制或保存到本地磁盘而不重新下载?
How can copy or save a loaded image inside Awesomium browser to local disk without redownload it?
有一种下载图像的方法:
http://docs.awesomium.net/html/M_Awesomium_Windows_Controls_WebControl_SaveImageAt.htm
There is a method for download an image :
http://docs.awesomium.net/html/M_Awesomium_Windows_Controls_WebControl_SaveImageAt.htm
但是它有两个问题:
- 它重新下载图像.
- 它显示了一个用于保存图像的弹出窗口,我不想要它.
而且javascript中的每一种方式都会重新下载目标图片!
解决方案是什么?
我们如何从缓存文件夹中获取下载的图像?
Also every way in javascript redownloads goal image!
What is the solution?
How can we grab the downloaded image from cache folder?
推荐答案
您可以尝试执行以下操作:
You can try something like this:
/// <summary>
/// Returns Base64 string of image content. Without redownloading image. If it is not on the same domain, WebSecurity must be set to false.
/// </summary>
/// <param name="getElementQuery">
/// <para>Any Javascript query to get an element.</para>
/// <para>Examples:</para>
/// <para>"document.getElementById('id')"</para>
/// <para>"document.getElementsByClassName('name')[0]"</para>
/// <para>"document.evaluate(\"//a[contains(@href, 'something')]\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue" (XPath)</para>
/// </param>
/// <param name="leaveOnlyBase64Data">if true, removes "data:image/type;base64," from the beginning of the string</param>
/// <returns>Base64 string or empty string in case of error</returns>
public static string JsGetImgBase64String(string getElementQuery, bool leaveOnlyBase64Data = true)
{
string data = webView.ExecuteJavascriptWithResult(@"
function getImgBase64String(img)
{
var cnv = document.createElement('CANVAS');
var ctx = cnv.getContext('2d');
ctx.drawImage(img, 0, 0);
return cnv.toDataURL();
}
" + String.Format("getImgBase64String({0});", getElementQuery));
if (data == "undefined")
return string.Empty;
if (leaveOnlyBase64Data && data.Contains(","))
{
data = data.Substring(data.IndexOf(",") + 1);
}
return data;
}
用法:
string imgBase64 = JsGetImgBase64String("document.getElementById('imageId')");
byte[] imgBytes = Convert.FromBase64String(imgBase64 );
如果图像不在同一域中,则可能需要在 WebPreferences
中将 WebSecurity
设置为 false
.
If the image is not on the same domain you may need to set WebSecurity
to false
in WebPreferences
.
这篇关于Awesomium如何保存加载的图像而无需重新下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!