def rotate(self, degrees, clockwise=False, resample_algorithm=nearest, resize_canvas=True): """ Returns the image obtained by rotating this image by the given number of degrees. Anticlockwise unless clockwise=True is given. """ # translate to the origin first, then rotate, then translate back transform = AffineTransform() transform = transform.translate(self.width * -0.5, self.height * -0.5) transform = transform.rotate(degrees, clockwise=clockwise) width, height = self.width, self.height if resize_canvas: # determine new width width, height = get_transformed_dimensions(transform, (0, 0, width, height)) transform = transform.translate(width * 0.5, height * 0.5) pixels = resample_algorithm.affine(self, transform, resize_canvas=resize_canvas) return self._copy(pixels)
def test_chained_translate_rotate(self): a = AffineTransform() # translate by (3, 4). rotate by 90 degrees t = a.translate(3, 4).rotate(90) self.assertEqual(t.matrix, (0, -1, 0, 1, 0, 0, 4, -3, 1))
def test_translate(self): a = AffineTransform() t = a.translate(3, 4) self.assertEqual(t.matrix, (1, 0, 0, 0, 1, 0, 3, 4, 1)) self.assertEqual(t.translate(3, 4).matrix, (1, 0, 0, 0, 1, 0, 6, 8, 1))
def test_chained_translate_rotate_translate(self): a = AffineTransform() # translate by (3, 4). rotate by 90 degrees. then translate back. t = a.translate(3, 4).rotate(90).translate(-3, -4) self.assertEqual(t.matrix, (0, -1, 0, 1, 0, 0, 1, -7, 1))