Math.PI
вращается на 180 °. n * Math.PI / 180
вращается на n
°. Так что в вашем случае вам нужно позвонить ctx.rotate(Math.PI/2)
.
И проблема с вашим кодом: вы все время перемещаете центр вращения. Поэтому, когда вы поворачиваете второй раз, этот центр уже находится где-то далеко от начала координат. Вы теперь переводите эту (перемещенную) точку, вращаете ее и затем рисуете. Скорее всего, теперь ваше новое изображение находится за пределами холста.
Так что вам нужно отменить ctx.translate(img.width - 1, img.height - 1);
после поворота с помощью ctx.translate(-(img.width - 1), -(img.height - 1));
.
Смотрите пример: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/rotate#Rotating_a_shape_around_its_center
Пример:
// Rotation by 90° around center at 150,75
ctx.translate(150, 75);
ctx.rotate(Math.PI / 2);
ctx.translate(-150, -75);