Html2canvas не правильно выполняет scale, добавляет белые пиксели

#1 Вчера в 22:02

Кто-нибудь знает, как с этим бороться?

Скрипт Html2canvas, там есть опция scale для масштабирования сохраняемого в изображение  контейнера  перед сохранением. 

Если пропорция 4:3 scale 4 выполняется корректно. Например было 400*300 готовый canvas.height получается 1200 и это в рамках scale * 4

Но при некоторых других пропорциях, он делает scale * 4.0008… в результате вместо условной высоты «было 100» – получается  «стало 403», снизу три лишних белых пикселя. 

#2 Вчера в 22:08

Однажды я тоже мучался с этим. Оказалось проблема связана с системным масштабированием. Попробуйте явно задать scale как целое число, примерно так:

  1. html2canvas(element, {
  2. scale: 4,
  3. windowWidth: Math.floor(element.offsetWidth * 4),
  4. windowHeight: Math.floor(element.offsetHeight * 4)
  5. });
#3 Вчера в 23:10

 Pechora, спасибо. Не получилось, но попробую ещё на тему

windowWidth:
windowHeight:

Как то непонятно. Он даже без scale  даёт лишний пиксель снизу. Но:

  1.  не на всех пропорциях
  2.  если посмотреть саму высоту контейнера, скажем с помощью $('#con').height(); высота нормальная, а уже на выходе  canvas.height   высота + несколько пикселей 
Добавлено спустя 11 минут


var nh = $("#container").height() * 4;
alert(nh); // вижу 1388
    html2canvas(document.querySelector("#container"),{
    scale:4,
    windowWidth: nw,
  windowHeight: nh
    }).then(canvas => {
        alert(canvas.height); // вижу 1392

}

Сегодня в 14:47
#4 Вчера в 23:15

 Нил™, а если сделать обрезку canvas? (гарантированно работает — судя по фидбеку из сети.) А вообще — это известная проблема html2canvas, про нее уже много где написано. 

#5 Сегодня в 00:40

Нил™, а если сделать обрезку canvas?

Pechora

буду смотреть в эту сторону. 

При изначальной высоте контейнера 255 *4 даёт правильные 1020 и без белой полосы.

По крайней мере, я знаю, что проблема скорее всего не в моем недочёте и не нужно биться в эту стену. Спасибо!

Добавлено спустя 1 час

По крайней мере, я знаю, что проблема скорее всего не в моем недочёте и не нужно биться в эту стену.

Нил™

Ага… вот прям взял и успокоился)


В общем, в моём случае вот так

  1. html2canvas(document.querySelector("#container"),{
  2. width: $("#container").width(),
  3. height: $("#container").height(),
  4. scale:4
  5. }).then(canvas => {
  6. const image = canvas.toDataURL();
  7. });

выглядит нормально. Белой полосы нет. Уффф...

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожие темы

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.