Spaces:
Runtime error
Runtime error
File size: 3,294 Bytes
c19ca42 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
import navi
from ...impl.color.convert_data import (
color_spaces,
color_spaces_or_detectors,
get_alpha_partner,
is_alpha_partner,
)
# pylint: disable=relative-beyond-top-level
from ...impl.image_utils import BorderType
from ...impl.pil_utils import InterpolationMethod, RotationInterpolationMethod
from .generic_inputs import DropDownInput, EnumInput
def ColorSpaceDetectorInput(label: str = "Color Space") -> DropDownInput:
return DropDownInput(
input_type="ColorSpace",
label=label,
options=[
{
"option": c.name,
"value": c.id,
"type": navi.named("ColorSpace", {"channels": c.channels}),
}
for c in color_spaces_or_detectors
],
)
def ColorSpaceInput(label: str = "Color Space") -> DropDownInput:
return DropDownInput(
input_type="ColorSpace",
label=label,
options=[
{
"option": c.name,
"value": c.id,
"type": navi.named(
"ColorSpace",
{
"channels": c.channels,
"supportsAlpha": get_alpha_partner(c) is not None,
},
),
}
for c in color_spaces
if not is_alpha_partner(c)
],
)
def InterpolationInput() -> DropDownInput:
"""Resize interpolation dropdown"""
return EnumInput(
InterpolationMethod,
option_labels={
InterpolationMethod.NEAREST: "Nearest Neighbor",
InterpolationMethod.BOX: "Area (Box)",
},
)
def RotateInterpolationInput() -> DropDownInput:
return EnumInput(
RotationInterpolationMethod,
label="Interpolation Method",
option_labels={
RotationInterpolationMethod.NEAREST: "Nearest Neighbor",
},
)
def BorderInput() -> DropDownInput:
return EnumInput(
BorderType,
default=BorderType.REFLECT_MIRROR,
option_labels={
BorderType.REFLECT_MIRROR: "Reflect (Mirror)",
BorderType.WRAP: "Wrap (Tile)",
BorderType.REPLICATE: "Replicate Edges",
},
extra_definitions="""
def BorderType::getOutputChannels(type: BorderType, channels: uint, color: Color | null): uint {
match type {
BorderType::Transparent => 4,
BorderType::CustomColor => match color {
Color => max(color.channels, channels),
null => never,
},
_ => channels
}
}
""",
)
def NormalChannelInvertInput() -> DropDownInput:
return DropDownInput(
input_type="NormalChannelInvert",
label="Invert",
options=[
{
"option": "None",
"value": 0,
},
{
"option": "Invert R",
"value": 1,
},
{
"option": "Invert G",
"value": 2,
},
{
"option": "Invert R and G",
"value": 3,
},
],
)
|