Parece que la transformación se aplica después de todo lo demás, por lo que la anchura y la altura no se actualizan. La mejor solución que se me ocurre es calcular las dimensiones rotados sí mismo, utilizando la matriz de rotación:
[ cos X -sin X ] [ width ]
[ sin X cos X ] [ height ]
Es fácil de traducir esto en JavaScript. Debe girar las cuatro esquinas (0,0) (w, 0) (0, h) (w, h) y luego las dimensiones giradas son el ancho y la altura del rectángulo delimitador girado.
var angle = angle_in_degrees * Math.PI/180,
sin = Math.sin(angle),
cos = Math.cos(angle);
// (0,0) stays as (0, 0)
// (w,0) rotation
var x1 = cos * width,
y1 = sin * width;
// (0,h) rotation
var x2 = -sin * height,
y2 = cos * height;
// (w,h) rotation
var x3 = cos * width - sin * height,
y3 = sin * width + cos * height;
var minX = Math.min(0, x1, x2, x3),
maxX = Math.max(0, x1, x2, x3),
minY = Math.min(0, y1, y2, y3),
maxY = Math.max(0, y1, y2, y3);
var rotatedWidth = maxX - minX,
rotatedHeight = maxY - minY;
Y por eso, cada vez que vea el texto girado en la web, es una imagen .. – T4NK3R
yo no podría estar más de acuerdo con @ T4NK3R, y esto a pesar de que estudió matrices de transformación hasta el agotamiento en la universidad. No es que lo anterior sea "difícil". ¿¡Pero por qué!? ¿No debería ser obviamente manejado por la transformación original? – seebiscuit