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") Continue reading...