Add options for quantization

This commit is contained in:
Fabien LOISON 2022-05-11 16:27:54 +02:00
parent 83f0edad70
commit 9897107a66
No known key found for this signature in database
GPG Key ID: FF90CA148348048E
2 changed files with 71 additions and 6 deletions

View File

@ -65,6 +65,33 @@ class Test_normalize_options(object):
("png_slow_optimization", 0, False),
("png_slow_optimization", "", False),
("png_slow_optimization", b"", False),
# enable_quantization
("enable_quantization", True, True),
("enable_quantization", False, False),
("enable_quantization", 1, True),
("enable_quantization", 0, False),
("enable_quantization", "", False),
("enable_quantization", b"", False),
# quantization_dithering_level
("quantization_dithering_level", 0.42, 0.42),
("quantization_dithering_level", 42, 1.0),
("quantization_dithering_level", "0.42", 0.42),
("quantization_dithering_level", ".42", 0.42),
("quantization_dithering_level", "42", 1.0),
("quantization_dithering_level", b"0.42", 0.42),
("quantization_dithering_level", b".42", 0.42),
("quantization_dithering_level", b"42", 1.0),
("quantization_dithering_level", -1, 0.0),
# quantization_max_colors
("quantization_max_colors", 128, 128),
("quantization_max_colors", 128.5, 128),
("quantization_max_colors", "128", 128),
("quantization_max_colors", "128.5", 128),
("quantization_max_colors", "255", 255),
("quantization_max_colors", 300, 256),
("quantization_max_colors", "300", 256),
("quantization_max_colors", b"255", 255),
("quantization_max_colors", 0, 1),
],
)
def test_options(self, option_name, input_, output):

View File

@ -3,12 +3,15 @@ import re
# fmt: off
DEFAULT_OPTIONS = {
"output_format": "orig", # orig|auto|jpeg|png|webp|webpl
"resize": "orig", # orig|[w,h]
"jpeg_quality": 0.84, # 0.00-1.00
"webp_quality": 0.90, # 0.00-1.00
"opacity_threshold": 254, # 0-255
"png_slow_optimization": False, # True|False
"output_format": "orig", # orig|auto|jpeg|png|webp|webpl
"resize": "orig", # orig|[w,h]
"jpeg_quality": 0.84, # 0.00-1.00
"webp_quality": 0.90, # 0.00-1.00
"opacity_threshold": 254, # 0-255
"png_slow_optimization": False, # True|False
"enable_quantization": False, # True|False
"quantization_dithering_level": 1.0, # 0.00-1.00
"quantization_max_colors": 256, # 1-256
}
# fmt: on
@ -130,4 +133,39 @@ def normalize_options(options=None):
options["png_slow_optimization"]
)
# "" -> False
# 0 -> False
# 1 -> True
if "enable_quantization" in options:
result["enable_quantization"] = bool(options["enable_quantization"])
# > 1.0 -> 1.0
# < 0.0 -> 0.0
# "0.5" -> 0.5
if "quantization_dithering_level" in options:
value = options["quantization_dithering_level"]
if type(value) in (str, bytes):
value = float(value)
value = max(value, 0.0)
value = min(value, 1.0)
result["quantization_dithering_level"] = value
# > 256 -> 256
# < 1 -> 1
# "128" -> 128
# 128.5 -> 128
if "quantization_max_colors" in options:
value = options["quantization_max_colors"]
if type(value) in (str, bytes):
value = float(value)
value = max(value, 1)
value = min(value, 256)
result["quantization_max_colors"] = int(value)
return result