Я пытаюсь захватить изображение в браузере, используя html2canvas . Захват изображения всего браузера работает. Но мне нужно указать x,y
начальную и конечную координаты, которые я хочу записать. В документах Я видел, что html2canvas
может принимать x,y
координаты:
x : По умолчанию : Элемент x-offset Описание: Обрезать холст X-координата
y : По умолчанию : Элемент y-offset Описание: Обрезать холст Y-координата
Передача моих x,y
координат этим параметрам просто захватывает все окно.
Поэтому вместо этого я попытался захватить все окно, а затем обрезать область из него, используя drawImage()
(найден в каком-то другом сообщении stackoverflow, не уверен, какое именно) :
function snapImage(x1,y1,x2,y2, e){
html2canvas(document.body).then(function(canvas) {
// calc the size -- but no larger than the html2canvas size!
var width = Math.min(canvas.width,Math.abs(x2-x1));
var height = Math.min(canvas.height,Math.abs(y2-y1));
// create a new avatarCanvas with the specified size
var avatarCanvas = document.createElement('canvas');
avatarCanvas.width=width;
avatarCanvas.height=height;
avatarCanvas.id = 'avatarCanvas';
// put avatarCanvas into document body
document.body.appendChild(avatarCanvas);
// use the clipping version of drawImage to draw
// a clipped portion of html2canvas's canvas onto avatarCanvas
var avatarCtx = avatarCanvas.getContext('2d');
avatarCtx.drawImage(canvas,x1,y1,width,height,0,0,width,height);
});
}
Это рисует смещенное изображение с неправильным смещением. Например, с учетом следующего веб-сайта:
изображение взято из примера по адресу: https://github.com/niklasvh/html2canvas/tree/master/examples
Я отмечаю область " pluot? ", чтобы привязать ее:
см. Пунктирный прямоугольник
Пунктирный прямоугольник рисуется с помощью js, учитывая координаты мыши в 2 событиях: onmousedown
и onmouseup
. Поскольку прямоугольник нарисован правильно, я предполагаю, что мои координаты верны. Но когда я передаю эти координаты функции snapImage()
выше, я получаю следующее захваченное изображение:
Похоже, что есть смещение. Может быть, начальные координаты drawImage()
работают иначе, чем мои начальные координаты холста?
EDIT:
Оказывается, мой код работает, когда я нахожусь на 100%. Это не так, когда я увеличиваю / уменьшаю.