70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
"""
|
|
B vs C, fairly matched: dual-corner (C) vs edge-rail with a stronger plate (B+)
|
|
to address the legibility hit Quinn flagged. Rendered on busy + bright.
|
|
|
|
Output: public/photos-watermarked/_preview/bc/
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
from watermark_lib import WatermarkStyle, render_watermark, FONT_DIR
|
|
|
|
REPO = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", ".."))
|
|
PUB = os.path.join(REPO, "deployments/@domains/quinn.www/root/public/photos")
|
|
OUT = os.path.join(PUB + "-watermarked", "_preview", "bc")
|
|
CARD_W = 380
|
|
|
|
SAMPLES = [
|
|
("busy", f"{PUB}/quinn-pink-bra-boots-mural.jpeg"),
|
|
("bright", f"{PUB}/quinn-nude-bed-frontal.jpeg"),
|
|
]
|
|
MODES = [
|
|
("C: dual-corner", WatermarkStyle(mode="dual-corner", text_width_frac=0.34)),
|
|
("B: edge-rail (orig)", WatermarkStyle(mode="edge-rail", rail_width_frac=0.46)),
|
|
("B+: edge-rail solid plate", WatermarkStyle(mode="edge-rail", rail_width_frac=0.46,
|
|
plate_alpha=215, plate_pad_frac=0.55)),
|
|
]
|
|
|
|
|
|
def label(im, text):
|
|
bar = 24
|
|
out = Image.new("RGB", (im.width, im.height + bar), (18, 18, 22))
|
|
out.paste(im, (0, 0))
|
|
try:
|
|
f = ImageFont.truetype(os.path.join(FONT_DIR, "Audiowide-Regular.ttf"), 13)
|
|
except Exception:
|
|
f = ImageFont.load_default()
|
|
ImageDraw.Draw(out).text((5, im.height + 5), text, fill=(255, 120, 190), font=f)
|
|
return out
|
|
|
|
|
|
def thumb(im, w=CARD_W):
|
|
return im.resize((w, round(im.height * w / im.width)), Image.LANCZOS)
|
|
|
|
|
|
def hstack(imgs, gap=12):
|
|
h = max(i.height for i in imgs)
|
|
out = Image.new("RGB", (sum(i.width for i in imgs) + gap * (len(imgs) - 1), h), (18, 18, 22))
|
|
x = 0
|
|
for i in imgs:
|
|
out.paste(i, (x, 0)); x += i.width + gap
|
|
return out
|
|
|
|
|
|
def main():
|
|
os.makedirs(OUT, exist_ok=True)
|
|
for sname, src in SAMPLES:
|
|
im = Image.open(src)
|
|
hstack([label(thumb(render_watermark(im, st)), ml) for ml, st in MODES]) \
|
|
.save(os.path.join(OUT, f"{sname}__bc.jpg"), quality=94)
|
|
print("written", OUT)
|
|
for f in sorted(os.listdir(OUT)):
|
|
print(" ", f)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|