根据 meceks 的回答,我使用以下版本来捕获 webdriver 映像,效果很好。
它以 90% 的质量创建 base64 jpeg 字符串。为了避免像素化问题,我将图像绘制到画布上,该画布比我稍后将要呈现的图像大。因此,图像被放大以最适合 600 像素的框,同时保留纵横比。
由于 jpeg 不支持透明度,我用白色背景清除上下文。
var base64string = (driver as IJavaScriptExecutor).ExecuteScript(@"
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
function getMaxSize(srcWidth, srcHeight, maxWidth, maxHeight) {
var widthScale = null;
var heightScale = null;
if (maxWidth != null)
{
widthScale = maxWidth / srcWidth;
}
if (maxHeight != null)
{
heightScale = maxHeight / srcHeight;
}
var ratio = Math.min(widthScale || heightScale, heightScale || widthScale);
return {
width: Math.round(srcWidth * ratio),
height: Math.round(srcHeight * ratio)
};
}
function getBase64FromImage(img, width, height) {
var size = getMaxSize(width, height, 600, 600)
canvas.width = size.width;
canvas.height = size.height;
ctx.fillStyle = 'white';
ctx.fillRect(0, 0, size.width, size.height);
ctx.drawImage(img, 0, 0, size.width, size.height);
return canvas.toDataURL('image/jpeg', 0.9);
}
var img = document.querySelector('#foo');
return getBase64FromImage(img, img.width, img.height);
") as string;
var base64 = base64string.Split(',').Last();