Source code for pierogis.ingredients.rotate
from typing import Union
import numpy as np
from PIL import Image
from .ingredient import Ingredient
from .pierogi import Pierogi
[docs]class Rotate(Ingredient):
"""rotate a pixel array"""
FILTERS = {
'default': Image.NEAREST,
'nearest': Image.NEAREST,
'box': Image.BOX,
'bicubic': Image.BICUBIC,
'bilinear': Image.BILINEAR,
'hamming': Image.HAMMING,
'lanczos': Image.LANCZOS,
}
[docs] def prep(
self,
clockwise: bool = True, turns: int = 1, angle: int = 90,
resample: Union[int, str] = FILTERS['default'],
**kwargs
):
"""
provide a given number of turns in a specified direction
:param clockwise: if True, top left pixel becomes top right
:param turns: number of "angle" degree turns to make
:param angle: distance to turn
:param resample: resample filter to use
"""
self.angle = angle
self.clockwise = clockwise
self.turns = turns
self.resample = resample
[docs] def cook(self, pixels: np.ndarray):
"""rotate the pixels according to angle"""
pierogi = Pierogi(pixels=pixels)
angle = self.turns * self.angle
if self.clockwise:
angle *= -1
pierogi.rotate(angle, self.resample)
return pierogi.pixels
[docs] @classmethod
def unrotate(cls, rotate: 'Rotate'):
"""
return a Rotate that will reverse the given Rotate
:param rotate: the rotate to reverse
"""
return cls(
angle=rotate.angle, clockwise=not rotate.clockwise, turns=rotate.turns, resample=rotate.resample
)