|
10 | 10 |
|
11 | 11 | from couchers import urls |
12 | 12 | from couchers.config import config |
13 | | -from couchers.resources import get_postcard_back_template, get_postcard_font, get_postcard_front_image |
| 13 | +from couchers.resources import ( |
| 14 | + get_postcard_back_left_template, |
| 15 | + get_postcard_font, |
| 16 | + get_postcard_front_image, |
| 17 | + get_postcard_metadata, |
| 18 | +) |
14 | 19 |
|
15 | 20 | logger = logging.getLogger(__name__) |
16 | 21 |
|
17 | 22 | API_BASE = "https://www.mypostcard.com/api/v1" |
18 | 23 |
|
19 | 24 |
|
20 | | -def _generate_back_left_side(verification_code: str) -> bytes: |
| 25 | +def _generate_back_left_side_png(verification_code: str) -> bytes: |
21 | 26 | """ |
22 | 27 | Generates the back left side image (780x1016 px PNG at 300 DPI). |
23 | 28 |
|
24 | | - Overlays a QR code and verification code onto the postcard-back.png template. |
| 29 | + Overlays a QR code and verification code onto the postcard-back-left.png template. |
25 | 30 | """ |
| 31 | + metadata = get_postcard_metadata()["back_left"] |
| 32 | + |
26 | 33 | # Load template |
27 | | - template_bytes = get_postcard_back_template() |
| 34 | + template_bytes = get_postcard_back_left_template() |
28 | 35 | img = Image.open(io.BytesIO(template_bytes)).convert("RGBA") |
29 | 36 | draw = ImageDraw.Draw(img) |
30 | 37 |
|
31 | | - # QR code position: exact coordinates in image are (227, 419, 539, 731), extended by 5px in each direction |
32 | | - qr_left, qr_top, qr_size = 222, 414, 322 |
33 | | - |
34 | 38 | # Generate QR code |
35 | 39 | qr = qrcode.QRCode(box_size=10, border=0) |
36 | 40 | qr.add_data(urls.postal_verification_link(code=verification_code)) |
37 | 41 | qr.make(fit=True) |
38 | 42 | qr_img: Image.Image = qr.make_image(fill_color="black", back_color="white").get_image().convert("RGBA") |
39 | 43 |
|
40 | 44 | # Size and paste the QR code |
| 45 | + # QR code position: exact coordinates in image are (227, 419, 539, 731), extended by 5px in each direction |
| 46 | + qr_size = metadata["qr_size"] |
41 | 47 | qr_img = qr_img.resize((qr_size, qr_size), Image.Resampling.NEAREST) |
42 | | - img.paste(qr_img, (qr_left, qr_top)) |
| 48 | + img.paste(qr_img, (metadata["qr_left"], metadata["qr_top"])) |
43 | 49 |
|
44 | 50 | # Verification code text center: box in image is (x=251, y=761, w=264, h=80), center is (383, 801) |
45 | | - code_center_x, code_center_y = 383, 801 |
46 | | - |
47 | | - font = ImageFont.truetype(io.BytesIO(get_postcard_font()), 58) |
48 | | - |
49 | | - draw.text((code_center_x, code_center_y), verification_code, fill=(255, 255, 255), font=font, anchor="mm") |
| 51 | + font = ImageFont.truetype(io.BytesIO(get_postcard_font()), metadata["code_font_size"]) |
| 52 | + |
| 53 | + draw.text( |
| 54 | + (metadata["code_center_x"], metadata["code_center_y"]), |
| 55 | + verification_code, |
| 56 | + fill=(255, 255, 255), |
| 57 | + font=font, |
| 58 | + anchor="mm", |
| 59 | + ) |
50 | 60 |
|
51 | 61 | buf = io.BytesIO() |
52 | 62 | img.save(buf, format="PNG") |
@@ -156,7 +166,7 @@ def send_postcard( |
156 | 166 | recipient["state"] = state |
157 | 167 |
|
158 | 168 | result = _place_order( |
159 | | - _authenticate(), recipient, get_postcard_front_image(), _generate_back_left_side(verification_code) |
| 169 | + _authenticate(), recipient, get_postcard_front_image(), _generate_back_left_side_png(verification_code) |
160 | 170 | ) |
161 | 171 | logger.info(f"MyPostcard order placed successfully: {result}") |
162 | 172 | return int(result["job_id"]) |
|
0 commit comments