1
0
Fork 0
mirror of synced 2024-06-02 18:54:41 +12:00
Rare/rare/models/image.py

101 lines
3.2 KiB
Python
Raw Permalink Normal View History

from enum import Enum
from typing import Tuple
from PyQt5.QtCore import QSize
class ImageType(Enum):
Tall = 0
Wide = 1
Icon = 3
Logo = 2
class ImageSize:
class Preset:
def __init__(self, divisor: float, pixel_ratio: float, orientation: ImageType = ImageType.Tall,
base: 'ImageSize.Preset' = None):
self.__divisor = divisor
self.__pixel_ratio = pixel_ratio
if orientation == ImageType.Tall:
self.__img_factor = 67
self.__size = QSize(self.__img_factor * 3, self.__img_factor * 4) * pixel_ratio / divisor
if orientation == ImageType.Wide:
self.__img_factor = 34
self.__size = QSize(self.__img_factor * 16, self.__img_factor * 9) * pixel_ratio / divisor
if orientation == ImageType.Icon:
self.__img_factor = 128
self.__size = QSize(self.__img_factor * 1, self.__img_factor * 1) * pixel_ratio / divisor
self.__orientation = orientation
# lk: for prettier images set this to true
# self.__smooth_transform: bool = True
self.__smooth_transform = divisor <= 2
self.__base = base if base is not None else self
def __eq__(self, other: 'ImageSize.Preset'):
return (
self.__size == other.size
and self.__divisor == other.divisor
and self.__smooth_transform == other.smooth
and self.__pixel_ratio == other.pixel_ratio
)
@property
def size(self) -> QSize:
return self.__size
@property
def divisor(self) -> float:
return self.__divisor
@property
def smooth(self) -> bool:
return self.__smooth_transform
@property
def pixel_ratio(self) -> float:
return self.__pixel_ratio
@property
def orientation(self) -> ImageType:
return self.__orientation
@property
def aspect_ratio(self) -> Tuple[int, int]:
if self.__orientation == ImageType.Tall:
return 3, 4
elif self.__orientation == ImageType.Wide:
return 16, 9
else:
return 0, 0
@property
def base(self) -> 'ImageSize.Preset':
return self.__base
Tall = Preset(1, 1)
"""! @brief Size and pixel ratio of the image on disk"""
DisplayTall = Preset(1, 1, base=Tall)
"""! @brief Size and pixel ratio for displaying"""
LibraryTall = Preset(1.21, 1, base=Tall)
"""! @brief Same as Display"""
Wide = Preset(1, 1, ImageType.Wide)
"""! @brief Size and pixel ratio for wide 16/9 image on disk"""
DisplayWide = Preset(2, 1, ImageType.Wide, base=Wide)
"""! @brief Size and pixel ratio for wide 16/9 image display"""
LibraryWide = Preset(2.41, 1, ImageType.Wide, base=Wide)
Icon = Preset(1, 1, ImageType.Icon)
"""! @brief Size and pixel ratio of the icon on disk"""
DisplayIcon = Preset(1, 1, ImageType.Icon, base=Icon)
"""! @brief Size and pixel ratio of the icon on disk"""
LibraryIcon = Preset(2.2, 1, ImageType.Icon, base=Icon)
"""! @brief Size and pixel ratio of the icon on disk"""