Получить значение атрибута src изображения для элемента canvas HTML5

#html #canvas

#HTML #холст

Вопрос:

Я искал — думаю, то, что я хочу сделать, невозможно, но подумал, что я бы проверил.

У меня есть несколько холстов на HTML-странице следующим образом: (эти идентификаторы приведены ниже)

  • canvasMain — здесь будет отображаться увеличенная версия изображения
  • canvasThumbnail1 — здесь будет отображаться уменьшенное изображение
  • canvasThumbnail2 — то же, что и выше … и т.д.

У меня это работает, когда я рисую canvasMain содержимым миниатюры. Проблема в том, что, поскольку холст является немедленным, он копирует пиксели по мере их перехода на canvasMain из canvasThumbnail. В результате получается увеличенное пиксельное изображение.

Что я хочу сделать, это щелкнуть по одному из элементов canvasThumbnails и получить возможность использовать свойство Image.src в виде строки, а затем перенести это в canvasMain вместо фактического копирования пикселей с одного холста на другой. По сути, просто возьмите адрес (локальный или, скажем, на Flickr), откуда я могу загрузить изображение. Кажется, что при переносе изображения на холст оно хорошо масштабируется.

Из того, что я видел, я не думаю, что значение Image.src доступно через 2d-контекст. Я перечислил его свойства и нашел только вложенные объекты или возвраты собственного кода.

Я подумал, что если я нажму на canvasThumbnail, а затем использую (this) для получения ссылки на этот элемент canvas, а затем получу 2dcontext этого canvas, я смогу использовать свойство этого контекста для получения строки, представляющей значение Image.src.

Есть идеи? Спасибо

Ответ №1:

Каким-то образом вы нарисовали изображение на canvasThumbnail1 , предположительно, из элемента изображения (с высоким разрешением).

У canvasThumbnail1 или любого другого canvas, если уж на то пошло, нет памяти для объектов, нарисованных на нем. Итак, если вы рисуете большое изображение на крошечном canvasThumbnail, данные с высоким разрешением не существуют на этом крошечном canvas. Чтобы получить его, вы должны снова использовать исходное изображение, иначе вам придется рисовать на холсте большего размера с самого начала.

Другими словами, вместо того, чтобы рисовать эскиз на главном, вам нужно перерисовать элемент изображения (который вы использовали для создания эскиза) на главном.

Комментарии:

1. Да, это правильно. Я создал холст, затем получил контекст. Затем я создал объект image с помощью Image.src, который представлял собой изображение с высоким разрешением. По сути, я хочу иметь возможность создавать эскиз, а затем нажимать на него, чтобы отобразить его на холсте большего размера.

2. Итак, все, что вам нужно сделать, это оба раза рисовать из объекта Image

3. Да -правильно. Я создал холст, затем получил контекст. Затем я создал объект image с помощью Image.src, который представлял собой изображение с высоким разрешением, и нарисовал его на холсте. По сути, я хочу иметь возможность создавать эскиз, а затем нажимать на него, чтобы отобразить его на холсте большего размера. Я надеялся, что, возможно, было доступно свойство, которое позволило бы мне просто извлекать изображение из URI вместо копирования пикселей. Я провел с ним некоторое тестирование и увидел, насколько хорошо canvas может масштабировать изображение любого размера. Я просто хотел убедиться, что мне придется кодировать для этого самому. Спасибо.

4. Я думаю, я понимаю, о чем вы говорите — я могу вставить все изображения при загрузке страницы, а затем просто указать, на какую миниатюру щелкнули, чтобы отобразить соответствующий холст.