"""PIL half of rc_overlay.py: python cs_overlay_img.py """ import sys, os import numpy as np from PIL import Image, ImageFilter, ImageChops HERE = os.path.dirname(os.path.abspath(__file__)) FOLDER = os.path.dirname(HERE) OUT = os.path.join(FOLDER, "previews", "fit") ref = Image.open(os.path.join(FOLDER, "reference", "ref_user.jpg")).convert("RGB") r = Image.open(sys.argv[1]).convert("RGBA") tag = sys.argv[2] # outline: alpha edge (silhouette) in red, colour edges inside (part boundaries) in yellow a = r.split()[3] sil = ImageChops.subtract(a.filter(ImageFilter.MaxFilter(3)), a.filter(ImageFilter.MinFilter(3))) rgb = Image.new("RGB", r.size, (0, 0, 0)) rgb.paste(r, mask=a) g = rgb.convert("L") inner = ImageChops.subtract(g.filter(ImageFilter.MaxFilter(3)), g.filter(ImageFilter.MinFilter(3))) inner = inner.point(lambda x: 255 if x > 40 else 0) o = np.asarray(ref).astype(np.float32) * 0.75 + 64 o[np.asarray(inner) > 0] = (255, 220, 0) o[np.asarray(sil) > 60] = (255, 0, 40) Image.fromarray(np.clip(o, 0, 255).astype(np.uint8)).save(os.path.join(OUT, "overlay_%s.png" % tag)) bg = Image.new("RGB", r.size, (255, 255, 255)) bg.paste(r, mask=a) Image.blend(ref, bg, 0.5).save(os.path.join(OUT, "blend_%s.png" % tag)) side = Image.new("RGB", (ref.width * 2 + 10, ref.height), (255, 255, 255)) side.paste(ref, (0, 0)) side.paste(bg, (ref.width + 10, 0)) side.save(os.path.join(OUT, "side_%s.png" % tag))