File size: 3,852 Bytes
94a7d52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import requests
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import uuid
# --- 1. SETUP: Define your data ---

# Input and Output files
template_path = 'template_natura_empty.jpg'

output_path = f'{uuid.uuid4()}.png'

# Image to place on the template
# NOTE: Replace this with parameters
product_image_url = 'https://production.na01.natura.com/on/demandware.static/-/Sites-natura-br-storefront-catalog/default/dw68595724/NATBRA-89834_1.jpg'
product_name = "Homem Cor.agio"
original_price = "De: R$ 399,00"
final_price = "Por: R$ 167,92"
coupon_code = "AGOSTOA"

# --- 2. IMAGE PROCESSING ---

try:
    # Load the base template image
    template_image = Image.open(template_path).convert("RGBA")

    # Fetch the product image from the URL
    response = requests.get(product_image_url)
    product_image_data = BytesIO(response.content)
    product_image = Image.open(product_image_data).convert("RGBA")

    # Define the position and size for the product image placeholder
    # These coordinates were estimated from your template (width, height)
    box_size = (442, 353)
    box_position = (140, 280) # (x, y) from top-left corner


    # --- KEY CHANGE 1: Resize image while preserving aspect ratio ---
    # The thumbnail method resizes the image to fit within the box_size
    # without changing its aspect ratio. It modifies the image in-place.
    product_image_resized = product_image.copy() # Work on a copy
    product_image_resized.thumbnail(box_size)

    # --- KEY CHANGE 2: Calculate position to center the image ---
    # Find the top-left corner to paste the image so it's centered in the box
    paste_x = box_position[0] + (box_size[0] - product_image_resized.width) // 2
    paste_y = box_position[1] + (box_size[1] - product_image_resized.height) // 2
    paste_position = (paste_x, paste_y)

    # Paste the resized product image onto the template
    template_image.paste(product_image_resized, paste_position, product_image_resized)

    # --- 3. TEXT DRAWING ---

    # Create a drawing context
    draw = ImageDraw.Draw(template_image)

    # Define fonts. For best results, download a font like 'Montserrat' and provide the path.
    # Using a default font if a specific one isn't found.
    try:
        font_name = ImageFont.truetype("Montserrat-Bold.ttf", 47)
        font_price_from = ImageFont.truetype("Montserrat-Regular.ttf", 28)
        font_price = ImageFont.truetype("Montserrat-Bold.ttf", 47)
        font_cupom = ImageFont.truetype("Montserrat-Bold.ttf", 33)
    except IOError:
        print("Arial font not found. Using default font.")
        font_bold = ImageFont.load_default()
        font_regular = ImageFont.load_default()
        font_price = ImageFont.load_default()
        font_cupom = ImageFont.load_default()

    # Define text colors
    white_color = "#FFFFFF"
    yellow_color = "#FEE161" # A yellow sampled from your design
    black_color = "#000000"

    # Add text to the image
    # The 'anchor="ms"' centers the text horizontally at the given x-coordinate
    
    # 1. Product Name
    draw.text((360, 710), product_name, font=font_name, fill=white_color, anchor="ms")

    # 2. Original Price
    draw.text((360, 800), original_price, font=font_price_from, fill=white_color, anchor="ms")

    # 3. Final Price
    draw.text((360, 860), final_price, font=font_price, fill=yellow_color, anchor="ms")
    
    # 4. Coupon Code
    draw.text((360, 993), coupon_code, font=font_cupom, fill=black_color, anchor="ms")

    # --- 4. SAVE THE FINAL IMAGE ---
    
    # Save the result as a PNG to preserve quality
    template_image.save(output_path)
    
    print(f"✨ Success! Image saved as '{output_path}'")

except FileNotFoundError:
    print(f"Error: The template file '{template_path}' was not found.")
except Exception as e:
    print(f"An error occurred: {e}")