A long time ago, in a galaxy far far away...
This commit is contained in:
@@ -6,6 +6,10 @@ from pathlib import Path
|
||||
import pytest
|
||||
|
||||
from imagepipeline.core.params import validate_params
|
||||
from imagepipeline.modules.color_to_alpha import (
|
||||
ColorToAlphaModule,
|
||||
build_color_to_alpha_args,
|
||||
)
|
||||
from imagepipeline.modules.composite import CompositeModule
|
||||
from imagepipeline.modules.crop_square import CropSquareModule
|
||||
from imagepipeline.modules.darktable_style import DarktableStyleModule
|
||||
@@ -14,6 +18,10 @@ from imagepipeline.modules.imagemagick_fill import (
|
||||
build_fill_arguments,
|
||||
)
|
||||
from imagepipeline.modules.imagemagick_grayscale import ImageMagickGrayscale
|
||||
from imagepipeline.modules.imagemagick_resize import (
|
||||
ImageMagickResizeModule,
|
||||
build_resize_arguments,
|
||||
)
|
||||
from imagepipeline.modules.gmic_grayscale import GmicGrayscale
|
||||
from imagepipeline.modules.registry import get_module, list_modules
|
||||
from imagepipeline.modules.rembg import RembgModule
|
||||
@@ -31,6 +39,8 @@ class TestModuleRegistration:
|
||||
"darktable_style",
|
||||
"imagemagick_grayscale",
|
||||
"imagemagick_fill",
|
||||
"color_to_alpha",
|
||||
"imagemagick_resize",
|
||||
"crop_square",
|
||||
):
|
||||
assert name in names
|
||||
@@ -42,6 +52,85 @@ class TestModuleRegistration:
|
||||
assert get_module("darktable_style") is DarktableStyleModule
|
||||
assert get_module("crop_square") is CropSquareModule
|
||||
assert get_module("imagemagick_fill") is ImageMagickFillModule
|
||||
assert get_module("color_to_alpha") is ColorToAlphaModule
|
||||
|
||||
|
||||
class TestImageMagickResize:
|
||||
def test_build_resize_arguments(self) -> None:
|
||||
assert build_resize_arguments(max_edge=2000) == [
|
||||
"-auto-orient",
|
||||
"-resize",
|
||||
"2000x2000>",
|
||||
]
|
||||
|
||||
def test_rejects_non_positive_max_edge(self) -> None:
|
||||
with pytest.raises(ValueError, match="positive"):
|
||||
build_resize_arguments(max_edge=0)
|
||||
|
||||
def test_default_max_edge(self) -> None:
|
||||
params = ImageMagickResizeModule.validate_module_params({})
|
||||
assert params["max_edge"] == 2000
|
||||
|
||||
|
||||
class TestColorToAlpha:
|
||||
def test_build_args_exact(self) -> None:
|
||||
assert build_color_to_alpha_args(color="#00ff00", fuzz=0.0) == [
|
||||
"-alpha",
|
||||
"on",
|
||||
"-transparent",
|
||||
"#00ff00",
|
||||
]
|
||||
|
||||
def test_build_args_with_fuzz(self) -> None:
|
||||
assert build_color_to_alpha_args(color="ffffff", fuzz=2.5) == [
|
||||
"-alpha",
|
||||
"on",
|
||||
"-fuzz",
|
||||
"2.5%",
|
||||
"-transparent",
|
||||
"#ffffff",
|
||||
]
|
||||
|
||||
def test_requires_color(self) -> None:
|
||||
with pytest.raises(ValueError, match="required"):
|
||||
ColorToAlphaModule.validate_module_params({})
|
||||
|
||||
@pytest.mark.skipif(not has_magick, reason="ImageMagick not installed")
|
||||
def test_makes_matching_color_transparent(self, tmp_path: Path) -> None:
|
||||
from imagepipeline.core.context import ModuleContext
|
||||
from imagepipeline.utils.subprocess import run_command
|
||||
|
||||
src = tmp_path / "green.png"
|
||||
output_dir = tmp_path / "out"
|
||||
output_dir.mkdir()
|
||||
magick = shutil.which("magick") or shutil.which("convert")
|
||||
run_command([magick, "-size", "8x8", "xc:#00ff00", str(src)])
|
||||
|
||||
ctx = ModuleContext(
|
||||
input_paths=[src],
|
||||
matched_groups=[],
|
||||
output_dir=output_dir,
|
||||
params=ColorToAlphaModule.validate_module_params({"color": "#00ff00"}),
|
||||
pipeline_output_root=tmp_path,
|
||||
step_id="color_to_alpha_01",
|
||||
logger=None,
|
||||
)
|
||||
ColorToAlphaModule().run(ctx)
|
||||
|
||||
dst = output_dir / "green.png"
|
||||
assert dst.is_file()
|
||||
result = run_command(
|
||||
[
|
||||
magick,
|
||||
str(dst),
|
||||
"-alpha",
|
||||
"extract",
|
||||
"-format",
|
||||
"%[fx:mean]",
|
||||
"info:",
|
||||
]
|
||||
)
|
||||
assert float(result.stdout.strip()) == 0.0
|
||||
|
||||
|
||||
class TestImageMagickFill:
|
||||
|
||||
Reference in New Issue
Block a user