Изменение размера HTML-холста не позволяет его содержимому
У меня есть элемент HTML-холста, размер которого изменяется, когда пользователь изменяет размер экрана.
canvas.height = pageHeight();
canvas.width = pageWidth();
Фактическое изменение размера работает отлично, но оно не отображает холст.
Я хотел бы сохранить содержимое. Есть ли другой способ изменить размер элемента canvas или есть способ сохранить содержимое и затем нарисовать его обратно на холст?
1 ответ
Вам нужно либо изменить размер холста с помощью CSS, либо перерисовать холст после изменения его размера.
Если вы хотите сохранить содержимое холста и перерисовать его, я могу предложить несколько вариантов:
- использование
context.getImageData
чтобы захватить весь холст, измените размер холста, затем используйтеcontext.putImageData
перерисовать его в новом масштабе. - Создать
Image
объект, устанавливая источник к результатуcanvas.toDataUrl()
, измените размер холста, затем нарисуйте изображение в новом масштабе. - вызов
context.setScale(xscale, yscale)
и вызвать любую функцию, которую вы использовали, чтобы нарисовать холст изначально. Предполагая, что вы настроилиxscale
а такжеyscale
правильно, он будет автоматически масштабировать все до нового размера. - Создайте новый холст с обновленным размером и вызовите
context.drawImage(oldCanvas, ...)
скопировать старый холст на новый. Тогда вы бы сменили старый холст на новый.
Первые два параметра не будут работать, если вы в любой момент нарисовали изображение из другого домена на холсте и не поддерживаются более старыми реализациями.
На мой взгляд, вариант 3 (перерисовка изображения в новом масштабе) является наилучшим, если это возможно. Это единственный вариант, который сделает ваши линии абсолютно гладкими и четкими, и он всегда будет работать (при условии, что у вас все еще есть вся информация для создания изображения).