42 lines
1.8 KiB
Python
42 lines
1.8 KiB
Python
"""从命令行入口验证透明素材检查,使用合成文件,不调用生图服务。"""
|
|||
|
|
import json
|
||
|
|
from pathlib import Path
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
import tempfile
|
||
|
|
import unittest
|
||
|
|
|
||
|
|
from PIL import Image
|
||
|
|
|
||
|
|
|
||
|
|
class AlphaCheckTest(unittest.TestCase):
|
||
|
|
def test_file_formats_and_alpha(self):
|
||
|
|
rgb = Image.new("RGB", (2, 2), "white")
|
||
|
|
rgb.putpixel((0, 0), (128, 128, 128))
|
||
|
|
rgba = Image.new("RGBA", (2, 2), (0, 0, 0, 255))
|
||
|
|
valid = rgba.copy()
|
||
|
|
valid.putpixel((0, 0), (0, 0, 0, 0))
|
||
|
|
partial = rgba.copy()
|
||
|
|
partial.putpixel((0, 0), (0, 0, 0, 128))
|
||
|
|
palette = Image.new("P", (2, 2), 1)
|
||
|
|
palette.putpalette([0, 0, 0, 255, 255, 255] + [0] * 762)
|
||
|
|
palette.putpixel((0, 0), 0)
|
||
|
|
palette.info["transparency"] = 0
|
||
|
|
cases = [("checker-rgb", rgb, False), ("opaque-rgba", rgba, False),
|
||
|
|
("transparent-rgba", valid, True), ("partial-alpha", partial, True),
|
||
|
|
("palette-transparency", palette, True),
|
||
|
|
("empty", Image.new("RGBA", (2, 2), (0, 0, 0, 0)), False)]
|
||
|
|
script = Path(__file__).resolve().parents[1] / "scripts/check_asset_alpha.py"
|
||
|
|
with tempfile.TemporaryDirectory() as directory:
|
||
|
|
for name, im, expected in cases:
|
||
|
|
with self.subTest(name=name):
|
||
|
|
path = Path(directory) / (name + ".png")
|
||
|
|
im.save(path)
|
||
|
|
result = subprocess.run([sys.executable, str(script), str(path),
|
||
|
|
"--require-transparency"], capture_output=True, text=True)
|
||
|
|
self.assertEqual(result.returncode, 0 if expected else 2, result.stderr)
|
||
|
|
self.assertEqual(json.loads(result.stdout)["transparency_check_passed"], expected)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|