Да, и GetImageData / PutImageData - это один из способов, но он, вероятно, намного медленнее, чем следующий:
Допустим, ваш холст называется realCanvas
. Создайте второй холст (мы назовем его fakeCanvas
), который будет настолько большим, насколько вы когда-либо предполагали, что ваш реальный холст будет, но только сделайте его в коде JavaScript и никогда не добавляйте его в документ (так что никто никогда не увидит его) ).
Затем перед изменением размера realCanvas
выполните следующую операцию:
fakeCanvasContext.drawImage(realCanvas, 0, 0);
Это перетянет один холст на другой, и это произойдет очень быстро с точки зрения производительности.
Как только вы закончите с изменением размера, вы можете нарисовать содержимое fakeCanvas обратно в ваш realCanvas.
realCanvasContext.drawImage(fakeCanvas, 0, 0);
И это все!
Если вы хотите стать техническим, вы можете ускорить мой путь, сделав это для второго розыгрыша:
realCanvasContext.drawImage(fakeCanvas,
0, 0, realCanvas.width, realCanvas.height,
0, 0, realCanvas.width, realCanvas.height);`
Таким образом, вы копируете только ту часть, которая может поместиться на realCanvas
. Обратите внимание, что я не проверял написанный код, поэтому возможна синтаксическая ошибка или две.