Изображение холста не совпадает с размером холста или оригинального изображения - PullRequest
0 голосов
/ 07 февраля 2019

Я поместил холст поверх фонового изображения.Когда я нажимаю кнопку «Попробовать», изображение появляется на холсте, но оно не соответствует размеру родительского или не помещается на холсте.Я вижу только верхнюю левую часть изображения.

Родительское изображение и холст имеют одинаковый размер.

HTML

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="style.css">
        <script src="script.js"></script>
    </head>
    <body>
        <div class="bg">
            <img src="Assets/Images/background.png" alt="background">   
        </div>
        <section class="content">

            <p>Image to use:</p>
            <img id="taxi" src="Assets/Images/PV.png" width="250" height="300">

            <p>Canvas to fill:</p>
            <canvas id="myCanvas" width="250" height="300"
            style="border:1px solid #d3d3d3;">
            Your browser does not support the HTML5 canvas tag.</canvas>

            <p><button onclick="myCanvas()">Try it</button></p>
        </section>

    </body>
</html>

JS

function myCanvas() {
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var img = document.getElementById("taxi");
    ctx.drawImage(img,10,10);
  }

Как получить, чтобы изображение на холсте было того же размера, что и родительский?Кроме того, как заставить изображение исчезнуть с холста, когда я нажимаю «Попробовать» на втором нажатии?

1 Ответ

0 голосов
/ 07 февраля 2019

У меня была та же проблема, и мне пришлось учиться трудным путем.Адаптивный Canvas и тот же аспект Ratio Canvas не так прост, как можно было бы надеяться.

Что нужно сделать:

function myCanvas() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("taxi");
ctx.drawImage(img,10,10, 250, 300);
}

Позвольте мне объяснить, почему.

ВВаш HTML, вы объявили вручную:

width="250" height="300"

Таким образом, изображение, проецируемое на холст, должно быть одинакового размера.Все это управляется функцией ctx.drawImage (img, 10,10, 250, 300).

Первый аргумент для fn - это ссылочные данные, это может быть видео, изображение и т. Д.

Второй аргумент - это смещение оси X, третий аргумент - это смещение оси Y (если вы не хотите смещения, просто передайте: ctx.drawImage (img, 0,0, 250, 300);.

В этом случае 4-й и 5-й аргументы соответствуют размеру того, что было передано в качестве первого аргумента.

Вот кодовая ручка, попробуйте изменить аргументы и посмотреть, что произойдет.

https://codepen.io/pen/?editors=1010

PS, вы можете передать еще много аргументов этому методу, но обычно это все, что вам нужно.

Просто хотите добавить, вы можете увеличить изображение меньшего размера, чтобы оно соответствовалоCanvas, и наоборот, но если вы объявляете размер Canvas с атрибутами HTML и используете меньшие числа в drawImage fn, он не будет заполнять холст. Кажется, HTML имеет больше специфики. Это может быть хорошоили плохо, но это важно знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...