html2canvas - отображать картинку без отображения страницы - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть php API с $ _POST, где я получаю ключ API и QR-код из запроса. Затем мой сервер php генерирует код html с <div>, <img> <html> <body> et c .. это означает полный веб-сайт - получение данных с сервера mysql и рендеринг на страницу html. В конце кода php у меня есть код javascript, подобный следующему:

?>
<script>


    window.scrollTo(0, 0);

html2canvas(document.getElementById("SelectorToPrint")).then(function (canvas) {
    var dd= canvas.toDataURL("image/jpeg",1);

    $.ajax({
  type: "POST",
  url: "https://myserver/API/sendimg.php",
  data: { 
      key: '<?php echo $key;?>',
      barkod: '<?php echo $qrcode;?>',
     img: dd
  }
}).done(function(o) {

});

});

</script>

Когда я отображаю страницу, изображение сохраняется (используя html2canvas js), все в порядке .

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

Есть ли некоторые способ рендеринга html страницы и сохранения изображения без отображения сгенерированного кода html?

Я поменял код некоторое время - чтобы не было $ _POST, но $ _GET и тестирование с этим кодом:

<?php
    $key='my_api_key';
    $qrcode='my_code';

    $test = file_get_contents('https://myserver/API/apipage.php?key='.$key.'&qrcode='.$qrcode);
    //var_dump($test) ;
?>

при удалении var_dump из кода страница не отображается и изображение не сохраняется. Когда я включаю var_dump (или просто print_r или echo), картинка генерируется правильно. Проблема в том, что я не хочу отображать код html (я думаю, это нормально, когда я говорю о вызовах API).

Спасибо за любую подсказку

1 Ответ

0 голосов
/ 04 мая 2020

ОК, поэтому мое решение было следующим:

установил xvfb на мой linux сервер

установил ssh2 для php

установил CutyCapt на моем linux сервер

вместо непосредственного вызова и рендеринга изображения - я вызываю специально созданным пользователем (с привилегиями только для выполнения этой работы) следующий скрипт непосредственно из php API

 "/usr/bin/xvfb-run --server-args='-screen 0, 1920x1080x24' /usr/bin/CutyCapt --url='{$url}' --zoom-factor=1.4 --out=/home/myuser/public_html/rendered_images/{$filename}.{$extension}"

, поэтому как я узнал, нет простого способа сделать это, но это выполнимо

надеюсь, это кому-нибудь поможет

...