

7·
9 months agoThe Norwegian have their issues, but when they get things right they really nail it.


The Norwegian have their issues, but when they get things right they really nail it.
Try this Python script:
from PIL import Image, ImageDraw, ImageFont
import os
from pathlib import Path
def watermark_from_filename(input_dir, output_dir=None,
position='bottom-right',
font_size=36,
color='white',
opacity=200):
"""
Add watermark to images using their filename (without extension)
Args:
input_dir: Directory containing images
output_dir: Output directory (if None, creates 'watermarked' subfolder)
position: 'bottom-right', 'bottom-left', 'top-right', 'top-left', 'center'
font_size: Size of the watermark text
color: Color of the text ('white', 'black', or RGB tuple)
opacity: Transparency (0-255, 255 is fully opaque)
"""
# Setup directories
input_path = Path(input_dir)
if output_dir is None:
output_path = input_path / 'watermarked'
else:
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
# Supported image formats
supported_formats = {'.jpg', '.jpeg', '.png', '.tiff', '.bmp'}
# Process each image
for img_file in input_path.iterdir():
if img_file.suffix.lower() not in supported_formats:
continue
print(f"Processing: {img_file.name}")
# Open image
img = Image.open(img_file)
# Convert to RGBA if needed (for transparency support)
if img.mode != 'RGBA':
img = img.convert('RGBA')
# Create transparent overlay
txt_layer = Image.new('RGBA', img.size, (255, 255, 255, 0))
draw = ImageDraw.Draw(txt_layer)
# Get filename without extension
watermark_text = img_file.stem
# Try to load a nice font, fall back to default if not available
try:
font = ImageFont.truetype("arial.ttf", font_size)
except:
try:
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", font_size)
except:
font = ImageFont.load_default()
# Get text size using textbbox
bbox = draw.textbbox((0, 0), watermark_text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
# Calculate position
margin = 20
if position == 'bottom-right':
x = img.width - text_width - margin
y = img.height - text_height - margin
elif position == 'bottom-left':
x = margin
y = img.height - text_height - margin
elif position == 'top-right':
x = img.width - text_width - margin
y = margin
elif position == 'top-left':
x = margin
y = margin
elif position == 'center':
x = (img.width - text_width) // 2
y = (img.height - text_height) // 2
else:
x = img.width - text_width - margin
y = img.height - text_height - margin
# Convert color name to RGB if needed
if color == 'white':
rgb_color = (255, 255, 255, opacity)
elif color == 'black':
rgb_color = (0, 0, 0, opacity)
else:
rgb_color = (*color, opacity) if isinstance(color, tuple) else (255, 255, 255, opacity)
# Draw text
draw.text((x, y), watermark_text, font=font, fill=rgb_color)
# Composite the watermark onto the image
watermarked = Image.alpha_composite(img, txt_layer)
# Convert back to RGB for JPEG
if img_file.suffix.lower() in {'.jpg', '.jpeg'}:
watermarked = watermarked.convert('RGB')
# Save
output_file = output_path / img_file.name
watermarked.save(output_file, quality=95)
print(f"Saved: {output_file.name}")
print(f"\nDone! Watermarked images saved to: {output_path}")
# Example usage:
if __name__ == "__main__":
# Watermark all images in current directory
watermark_from_filename(
input_dir=".",
position='bottom-right',
font_size=48,
color='white',
opacity=200
)
To use this script:
Install Pillow: pip install Pillow
Save the script as watermark_dates.py
Run it in your image directory:
python watermark_dates.py
Customization options:
position: Choose where the watermark appearsfont_size: Adjust text sizecolor: ‘white’, ‘black’, or RGB tuple like (255, 0, 0) for redopacity: 0-255 (lower = more transparent)
I’m guessing you are referring to this? https://stopomarchy.org/extended