Дайте высоту объекту изображения, используя javascript, не работает

Я пытаюсь придать высоту объекту изображения с помощью javascript, но это не работает.

html-код

 <canvas id="canvas1" height="500px" width="500px">

 </canvas>

Я хочу создать фоновое изображение с помощью javascript, и это изображение должно быть установлено в соответствии с размером холста.

Код JavaScript:

canvas = document.getElementById("canvas1");
c = canvas.getContext("2d");
var bg = new Image();
bg.src = "images/bg.png";
bg.height = "100";
bg.width = "100";
c.drawImage(bg,0,0);

Я вижу изображение, но не могу указать высоту и ширину этого изображения во время выполнения.
Как я могу указать высоту и ширину объекта изображения во время выполнения?
Заранее благодарю за помощь.


person Rikin Thakkar    schedule 07.02.2014    source источник


Ответы (2)


В коде есть несколько проблем:

Выпуск 1

Первым из них являются атрибуты тега. На самом деле это не влияет на результат, но правильный синтаксис - целочисленное значение без px в конце, поскольку ширина и высота холста могут использовать только пиксели:

<canvas id="canvas1" height="500" width="500"></canvas>

Выпуск 2

Следующая проблема заключается в том, что вы пытаетесь установить свойства только для чтения для элемента изображения:

var bg = new Image();
bg.src = "images/bg.png";
//bg.height = "100";      invalid
//bg.width = "100";       invalid

Вам действительно не нужно устанавливать размер изображения; вы можете, если хотите, используя этот синтаксис (затем получите фактический размер, используя naturalWidth / naturalHeight, если они понадобятся вам позже - полное изображение будет загружено в любом случае):

var bg = new Image(width, height);

Но вы можете просто использовать ширину и высоту с помощью метода drawImage() (см. ниже).

Выпуск 3

Третья проблема заключается в том, что вы не разрешаете загрузку изображения. Загрузка изображения асинхронна, поэтому вам нужно добавить обработчик onload:

var bg = new Image();
bg.onload = done;         /// wait for image to load, then call done()
bg.src = "images/bg.png";

function done() {
    c.drawImage(bg,0,0);
    /// continue here
}

При желании определите целевой размер следующим образом:

function done() {
    c.drawImage(bg,0,0, width, height);  /// the size you want
    /// continue here
}

Если вы хотите заполнить холст, используйте:

c.drawImage(bg,0,0, canvas.width, canvas.height);

Надеюсь это поможет!

person Community    schedule 07.02.2014
comment
Вы великолепны .. Большое спасибо. - person Rikin Thakkar; 07.02.2014

Поскольку он находится на холсте, вам нужно установить их в функции drawimage.

canvas = document.getElementById("canvas1");
c = canvas.getContext("2d");
var bg = new Image();
bg.src = "images/bg.png";
c.drawImage(bg,0,0, 100, 100);
person Emilio Rodriguez    schedule 07.02.2014
comment
c.drawImage(bg, 0,0, 100, 100) работает. Но что делать, если я хочу применить это для более чем одного изображения. Оно должно быть динамическим. Здесь мы задаем статическую высоту 100. - person Rikin Thakkar; 07.02.2014
comment
@RikinThakkar работает на вашем локальном компьютере, но не на внешнем сервере, так как этот код не обрабатывает загрузку изображения. - person ; 07.02.2014
comment
@Ken Это означает, что этот код не будет работать динамически ..? - person Rikin Thakkar; 07.02.2014
comment
@RikinThakkar будет работать динамически, но загрузка изображения асинхронная. вам нужно дождаться загрузки изображения. Вот почему вам нужно добавить обработчик загрузки и продолжить оттуда. Если вы попытаетесь нарисовать изображение до того, как оно загрузится, оно окажется пустым. - person ; 07.02.2014