这是我在这里回答的第一篇帖子 :)
实际上,我目前正在使用cefsharp Web浏览器组件中的一个项目,cefsharp运行在基于chrome的浏览器上,我想复制网页中的img元素。
使用cefsharp,您只能操作浏览器上的javascript,因此我认为我们可以使用canvas元素来处理它。
Original Answer翻译成"最初的回答"
function copyImage() {
var imgCap = document.getElementById('imgCap');
var imgCanvas = document.createElement('canvas');
imgCanvas.id = 'imgCanvas';
imgCanvas.height = 40;
imgCanvas.width = 120;
document.body.appendChild(imgCanvas);
var originalContext = imgCanvas.getContext('2d');
originalContext.drawImage(imgCap, 0, 0);
}
<img id="imgCap" src="http://lorempixel.com/120/40" onload="copyImage();"/>
使用return imgCanvas.toDataURL();
可以获得base64编码的值,并在您需要的地方使用。
这是我的CefSharp代码,它可以正常工作。
(注:Original Answer翻译成"最初的回答")
string copyImageOtClipboardScript = "(function(){ try{var imgCap = document.getElementById('imgCap'); var imgCanvas = document.createElement('canvas'); imgCanvas.id = 'imgCanvas'; imgCanvas.height = 40; imgCanvas.width = 120; document.body.appendChild(imgCanvas); var originalContext = imgCanvas.getContext('2d'); originalContext.drawImage(imgCap, 0, 0); return imgCanvas.toDataURL(); }catch(e){ alert(e); } })();";
var task = chromeBrowser.EvaluateScriptAsync(copyImageOtClipboardScript).ContinueWith(x =>
{
var resp = x.Result;
if (resp.Success)
{
this.Invoke((MethodInvoker)delegate
{
Bitmap bmp = null;
string captchaResult = "", captchaBase64;
var bytes = Convert.FromBase64String(resp.Result.ToString().Replace("data:image/png;base64,", ""));
using (var imageFile = new FileStream("temp_captcha.png", FileMode.Create))
{
imageFile.Write(bytes, 0, bytes.Length);
imageFile.Flush();
}
});
}
});