#!/usr/bin/env python3
"""Defringe pass: erode alpha mask to kill white halos, premultiply, re-check."""
import numpy as np
from PIL import Image, ImageFilter
import glob, os

OUT = '/root/.hermes/image_cache/zrd_cutouts/'

for f in sorted(glob.glob(OUT + 'item_*.png')):
    rgba = Image.open(f).convert('RGBA')
    rgb = np.array(rgba)[:, :, :3].astype(np.float32)
    a = np.array(rgba)[:, :, 3]
    # erode alpha by ~2px (MinFilter 5), then slight blur for AA
    a_im = Image.fromarray(a, 'L').filter(ImageFilter.MinFilter(5))
    a_im = a_im.filter(ImageFilter.GaussianBlur(0.8))
    a2 = np.array(a_im).astype(np.float32)
    # premultiply: dim white fringe in proportion to its coverage
    rgb2 = (rgb * (a2[..., None] / 255.0)).astype(np.uint8)
    out = Image.fromarray(np.dstack([rgb2, a2.astype(np.uint8)]), 'RGBA')
    # re-trim bbox
    bbox = out.getbbox()
    if bbox:
        xa, ya, xb, yb = bbox
        m = 2
        out = out.crop((max(0,xa-m), max(0,ya-m), min(out.width,xb+m), min(out.height,yb+m)))
    out.save(f)
    op = np.array(out)[:, :, 3]
    print(os.path.basename(f), out.size, 'opq%%=%.1f' % ((op>200).mean()*100))
print('done')
