DataProcessingFramework
53 строки · 1.6 Кб
1from enum import IntEnum2
3
4# types of resizing logic in Resizer
5class ResizerModes(IntEnum):6FIXED = 07MIN_SIZE = 18MAX_SIZE = 29
10
11class Resizer:12"""13Resizer class that used for different resizing strategies
14"""
15
16def __init__(17self,18mode: ResizerModes,19fixed_size: tuple[int, int] = (512, 512),20size: int = 512,21downscale_only: bool = True22):23self.mode = mode24assert self.mode in [ResizerModes.FIXED, ResizerModes.MIN_SIZE, ResizerModes.MAX_SIZE], \25f"Invalid resizer mode: {self.mode}. Use mode from ResizerModes"26
27self.fixed_size = fixed_size28self.size = size29self.downscale_only = downscale_only30
31def get_new_size(self, width: int, height: int) -> tuple[int, int]:32if self.mode == ResizerModes.FIXED:33new_w, new_h = self.fixed_size34elif self.mode == ResizerModes.MIN_SIZE:35if self.downscale_only and min(height, width) < self.size:36new_w, new_h = width, height37elif height >= width:38new_w = self.size39new_h = int(self.size * height / width)40else:41new_h = self.size42new_w = int(self.size * width / height)43else:44if self.downscale_only and max(height, width) < self.size:45new_w, new_h = width, height46elif width >= height:47new_w = self.size48new_h = int(self.size * height / width)49else:50new_h = self.size51new_w = int(self.size * width / height)52
53return new_w, new_h54