Added code
This commit is contained in:
parent
dd84583a6e
commit
410c9a6aaf
2 changed files with 62 additions and 2 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -8,3 +8,8 @@ wheels/
|
|||
|
||||
# Virtual environments
|
||||
.venv
|
||||
|
||||
# Data files
|
||||
participants.csv
|
||||
cert.png
|
||||
CrimsonText-Bold.ttf
|
||||
|
|
59
main.py
59
main.py
|
@ -1,6 +1,61 @@
|
|||
def main():
|
||||
print("Hello from img-cert-maker!")
|
||||
import csv
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
def generate_certificate(template_path, font_path, output_folder, name, font_size=50, text_color="black", y_offset=0):
|
||||
# Open the certificate template image
|
||||
with Image.open(template_path) as image:
|
||||
# Convert image to RGBA if not already (to support transparency if needed)
|
||||
image = image.convert("RGBA")
|
||||
draw = ImageDraw.Draw(image)
|
||||
|
||||
# Load the Inter Semi Bold font at the desired size
|
||||
font = ImageFont.truetype(font_path, font_size)
|
||||
|
||||
# Get image dimensions
|
||||
image_width, image_height = image.size
|
||||
|
||||
# Determine the size of the text to be drawn
|
||||
# Note: textsize may not be pixel-perfect for all fonts; textbbox is available in newer Pillow versions.
|
||||
text_width, text_height = draw.textsize(name, font=font)
|
||||
|
||||
# Calculate coordinates for centered text
|
||||
x = (image_width - text_width) / 2
|
||||
# Adjust y coordinate; here we center vertically then apply optional y_offset (e.g., for slight nudging)
|
||||
y = (image_height - text_height) / 2 + y_offset
|
||||
|
||||
# Draw the name onto the certificate image
|
||||
draw.text((x, y), name, fill=text_color, font=font)
|
||||
|
||||
return image
|
||||
|
||||
def main():
|
||||
# File paths and settings -- update these as needed
|
||||
template_path = "cert" # Path to your certificate image template
|
||||
font_path = "CrimsonText-Bold.ttf" # Path to the Inter Semi Bold TTF file
|
||||
csv_file = "names.csv" # Path to the CSV file containing names
|
||||
output_folder = "certificates" # Folder to save generated certificate images
|
||||
font_size = 50 # Adjust font size based on your template
|
||||
text_color = "black" # Text color; change as necessary
|
||||
y_offset = 0 # Adjust vertical offset if the text is not in the desired location
|
||||
|
||||
# Create output folder if it doesn't exist
|
||||
import os
|
||||
if not os.path.exists(output_folder):
|
||||
os.makedirs(output_folder)
|
||||
|
||||
# Read names from CSV
|
||||
with open(csv_file, newline='', encoding='utf-8') as csvfile:
|
||||
reader = csv.DictReader(csvfile)
|
||||
for i, row in enumerate(reader, start=1):
|
||||
# Get name from first column (index 0)
|
||||
name = row[0] # First column contains the names
|
||||
# Generate a personalized certificate image with the name
|
||||
certificate_image = generate_certificate(template_path, font_path, output_folder, name, font_size, text_color, y_offset)
|
||||
|
||||
# Save the certificate with a unique filename (you could also include the name in the filename)
|
||||
output_filename = os.path.join(output_folder, f"certificate_{i:03d}.png")
|
||||
certificate_image.save(output_filename)
|
||||
print(f"Saved certificate for {name} as {output_filename}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
Loading…
Add table
Reference in a new issue