diff --git a/src/PIL/_imagingcms.pyi b/src/PIL/_imagingcms.pyi index e27843e53..9cfd9d191 100644 --- a/src/PIL/_imagingcms.pyi +++ b/src/PIL/_imagingcms.pyi @@ -1,3 +1,146 @@ -from typing import Any +import datetime +import sys +from typing import Literal, TypedDict -def __getattr__(name: str) -> Any: ... +littlecms_version: str + +_tuple_3f = tuple[float, float, float] +_tuple_2x3f = tuple[_tuple_3f, _tuple_3f] +_tuple_3x3f = tuple[_tuple_3f, _tuple_3f, _tuple_3f] +_tuple_2x3x3f = tuple[_tuple_3x3f, _tuple_3x3f] + +class _IccMeasurementCondition(TypedDict): + observer: int + backing: _tuple_3f + geo: str + flare: float + illuminant_type: str + +class _IccViewingCondition(TypedDict): + illuminant: _tuple_3f + surround: _tuple_3f + illuminant_type: str + +class CmsProfile: + @property + def rendering_intent(self) -> int: ... + @property + def creation_date(self) -> datetime.datetime | None: ... + @property + def copyright(self) -> str | None: ... + @property + def target(self) -> str | None: ... + @property + def manufacturer(self) -> str | None: ... + @property + def model(self) -> str | None: ... + @property + def profile_description(self) -> str | None: ... + @property + def screening_description(self) -> str | None: ... + @property + def viewing_condition(self) -> str | None: ... + @property + def version(self) -> float: ... + @property + def icc_version(self) -> int: ... + @property + def attributes(self) -> int: ... + @property + def header_flags(self) -> int: ... + @property + def header_manufacturer(self) -> str: ... + @property + def header_model(self) -> str: ... + @property + def device_class(self) -> str: ... + @property + def connection_space(self) -> str: ... + @property + def xcolor_space(self) -> str: ... + @property + def profile_id(self) -> bytes: ... + @property + def is_matrix_shaper(self) -> bool: ... + @property + def technology(self) -> str | None: ... + @property + def colorimetric_intent(self) -> str | None: ... + @property + def perceptual_rendering_intent_gamut(self) -> str | None: ... + @property + def saturation_rendering_intent_gamut(self) -> str | None: ... + @property + def red_colorant(self) -> _tuple_2x3f | None: ... + @property + def green_colorant(self) -> _tuple_2x3f | None: ... + @property + def blue_colorant(self) -> _tuple_2x3f | None: ... + @property + def red_primary(self) -> _tuple_2x3f | None: ... + @property + def green_primary(self) -> _tuple_2x3f | None: ... + @property + def blue_primary(self) -> _tuple_2x3f | None: ... + @property + def media_white_point_temperature(self) -> float | None: ... + @property + def media_white_point(self) -> _tuple_2x3f | None: ... + @property + def media_black_point(self) -> _tuple_2x3f | None: ... + @property + def luminance(self) -> _tuple_2x3f | None: ... + @property + def chromatic_adaptation(self) -> _tuple_2x3x3f | None: ... + @property + def chromaticity(self) -> _tuple_3x3f | None: ... + @property + def colorant_table(self) -> list[str] | None: ... + @property + def colorant_table_out(self) -> list[str] | None: ... + @property + def intent_supported(self) -> dict[int, tuple[bool, bool, bool]] | None: ... + @property + def clut(self) -> dict[int, tuple[bool, bool, bool]] | None: ... + @property + def icc_measurement_condition(self) -> _IccMeasurementCondition | None: ... + @property + def icc_viewing_condition(self) -> _IccViewingCondition | None: ... + def is_intent_supported(self, intent: int, direction: int, /) -> int: ... + +class CmsTransform: + @property + def inputMode(self) -> str: ... + @property + def outputMode(self) -> str: ... + def apply(self, id_in: int, id_out: int) -> int: ... + +def profile_open(profile: str, /) -> CmsProfile: ... +def profile_frombytes(profile: bytes, /) -> CmsProfile: ... +def profile_tobytes(profile: CmsProfile, /) -> bytes: ... +def buildTransform( + input_profile: CmsProfile, + output_profile: CmsProfile, + in_mode: str, + out_mode: str, + rendering_intent: int = 0, + cms_flags: int = 0, + /, +) -> CmsTransform: ... +def buildProofTransform( + input_profile: CmsProfile, + output_profile: CmsProfile, + proof_profile: CmsProfile, + in_mode: str, + out_mode: str, + rendering_intent: int = 0, + proof_intent: int = 0, + cms_flags: int = 0, + /, +) -> CmsTransform: ... +def createProfile( + color_space: Literal["LAB", "XYZ", "sRGB"], color_temp: float = 0.0, / +) -> CmsProfile: ... + +if sys.platform == "win32": + def get_display_profile_win32(handle: int = 0, is_dc: int = 0, /) -> str | None: ...