minus-squaretomatolung@sopuli.xyztoOpen Source@lemmy.ml•file name as a time stamp or watermarklinkfedilinkarrow-up1·10 hours agoTry 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 appears font_size: Adjust text size color: ‘white’, ‘black’, or RGB tuple like (255, 0, 0) for red opacity: 0-255 (lower = more transparent) linkfedilink
tomatolung@sopuli.xyz to Technology@lemmy.worldEnglish · 26 days agoDutch chips star exec slams EU for overregulating AIplus-squarewww.politico.euexternal-linkmessage-square4linkfedilinkarrow-up10arrow-down10
arrow-up10arrow-down1external-linkDutch chips star exec slams EU for overregulating AIplus-squarewww.politico.eutomatolung@sopuli.xyz to Technology@lemmy.worldEnglish · 26 days agomessage-square4linkfedilink
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 PillowSave the script as
watermark_dates.pyRun it in your image directory:
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)