[Python] How can I generate Number Plate with realistic fonts and effect?

Discussão em 'Python' iniciado por Stack, Agosto 21, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to generate realistic number plate as shown in the following image. I have tried different methods but failed. Here is my current code:

    from PIL import Image, ImageDraw, ImageFont

    def generate_plate(template_path, output_path, plate_letter, plate_number): template = Image.open(template_path).convert("RGBA") draw = ImageDraw.Draw(template)

    # Load better font (replace with downloaded plate font)
    font_letter = ImageFont.truetype("fonts/BarlowCondensed-Light.ttf", 150)
    font_number = ImageFont.truetype("fonts/BarlowCondensed-Light.ttf", 160)

    # Positions
    letter_position = (80, 100)
    number_position = (600, 100)

    # Shadow offsets for 3D effect
    shadow_offset = (3, 3)
    shadow_color = (50, 50, 50, 255) # dark gray
    text_color = (0, 0, 0, 255) # black
    highlight_color = (180, 180, 180, 255) # lighter edge highlight

    # --- Draw Letter with 3D effect ---
    # Shadow
    draw.text((letter_position[0] + shadow_offset[0], letter_position[1] + shadow_offset[1]),
    plate_letter, font=font_letter, fill=shadow_color)
    # Highlight
    draw.text((letter_position[0] - 2, letter_position[1] - 2),
    plate_letter, font=font_letter, fill=highlight_color)
    # Main text
    draw.text(letter_position, plate_letter, font=font_letter, fill=text_color)

    # --- Draw Number with 3D effect ---
    draw.text((number_position[0] + shadow_offset[0], number_position[1] + shadow_offset[1]),
    plate_number, font=font_number, fill=shadow_color)
    draw.text((number_position[0] - 2, number_position[1] - 2),
    plate_number, font=font_number, fill=highlight_color)
    draw.text(number_position, plate_number, font=font_number, fill=text_color)

    template.save(output_path)

    Example


    generate_plate("1200.png", "generated_plate_3d.png", "B", "65556")

    [​IMG]

    Continue reading...

Compartilhe esta Página