Python-ы Pillow санг ашиглан дизайнерийн нэг өдрийг аварсан нь

Surenbayar Doloonjin
Dev notes from teo
Published in
3 min readDec 27, 2022

Ажил дээр гарсан бүтээлч гэж хэлж болохуйц нэгэн өдрийн түүхээс хуваалцая.

Саяхан манай компаний “WELCOME TO TEO” нэртэй эвент болоод өнгөрсөн билээ. Тухайн үед хамтрагч байгууллагуудын төлөөлөл 200 гаруй хүнд эвентийн урилга илгээх ажил гарсан. Эвентийн үеэр урилгаа ашиглаж урамшуулал авах зэрэг маркетингийн үйл ажиллагаанууд хийх ёстой байв. Энэ “жижиг” даалгаврын шаардлагыг товч байдлаар хүргэе.

  1. Зочин бүрт зориулж QR код үүсгэх
  2. Үүсгэсэн QR кодоо урилгын зурагт нэмэн зочин бүрт урилга бэлтгэх
  3. Урилга бүр дээр зочины нэр оруулах
  4. QR кодоос тухайн зочин хэн гэдгийг мэдэж чаддаг байх

Урилгын загвар зураг

template.jpg

Энэ даалгавар эхэндээ манай компаний дизайнер болон борлуулалтын ажилтанд оногдоод байсан. QR бүрийг үүсгэх, үүссэн QR бүрийг зургийн програм ашиглан дээрх зурагт нэмэх гээд маш их механик ажлыг нэг өдрийн дотор дуусгах хүндхэн даалгавар байв.

Харин энэ хүндхэн даалгаврыг python хэл дээр хэдэн мөр код бичээд богино хугацаанд шийдэж чадсан юм. Хэн нэгэнд хэрэг болж магад гэж бодоод шийдлээ орууллаа.

Суулгах сангууд

pip install qrcode
pip install Pillow

qrcode нь текстээс QR код үүсгэж өгөх сан бол Pillow нь зурагтай харьцах сан юм.

QR-д оруулах дата формат

data = {
"id": 1, # ID
"name": "Сүрэнбаяр", # нэр
"org": "TEO", # байгууллага
'sd': 1667520000, # эхлэх хугацаа
'ed': 1670169599, # дуусах хугацаа
's': 1, # төлөв
'v': 40000
}

QR код үүсгэх код

import qrcode
import json

# json датаг стринг болгох
data_str = json.dumps(data)
# qr үүсгэх
qr = qrcode.QRCode(box_size=9, border=2)
qr.add_data(data_str)
# qr ийг зураг болгох
qr_img = qr.make_image()
qr_img.save("result_qr.png")

Урилгын загвар зураг унших

from PIL import Image


invitation_img = Image.open('template.jpg')

QR кодыг зургийн доод хэсэгт камераар уншигдахуйц байрлуулах

# эдгээр утгуудыг туршилтаар олсон
pos = (290, 1157)
invitation_img.paste(qr_img, pos)

Зочины нэрийг нэмэх

from PIL import Image, ImageDraw, ImageFont

draw = ImageDraw.Draw(invitation_img)
name = data['name']
# фонт сонгох
fontsize = 36
if len(name) > 14:
fontsize = 30
font = ImageFont.truetype("arial.ttf", fontsize)

# нэрийг цагаан input хэсэгт голлуулж оруулах
w, h = draw.textsize(name, font=font)
draw.text((530 - w / 2, 675 - h / 2), name, (0, 0, 0), font=font, align="left")

Файлруу хадгалах

invitation_img.save('result.png')

Үр дүн:

Одоо харин олон зочины хувьд дээрх үйлдлийг давталт дотор нэмэх л үлдлээ. Ингэхийн тулд нийт зочдын мэдээллийг csv файлруу бичээд уг csv файлаас мэдээллээ уншдаг байдлаар кодоо өөрчлөв.
Миний хувьд CSV файл уншихдаа хэрэглэж дадсан pandas санг ашигласан ба та бүхэн өөрт хялбар санг суулгаад ашиглаарай.

pip install pandas

Дата уншиж давталанд нэмэх

# дата унших
df = pd.read_csv('data.csv')
# list(dict) хэлбэрт хөрвүүлэх
full_data = df.T.to_dict().values()

for data in full_data:
process(data)

Бүтэн код:

import json
import qrcode
from PIL import Image, ImageDraw, ImageFont
import pandas as pd


def generate_qr(data):
data_str = json.dumps(data)
qr = qrcode.QRCode(box_size=9, border=2)
qr.add_data(data_str)
return qr.make_image()


df = pd.read_csv('data.csv')
full_data = df.T.to_dict().values()

for data in full_data:
qr_img = generate_qr(data)
qr_img.save("result_qr.png")

invitation_img = Image.open('template.jpg')

pos = (290, 1157)
invitation_img.paste(qr_img, pos)
draw = ImageDraw.Draw(invitation_img)
name = data['name']
fontsize = 36
if len(name) > 14:
fontsize = 30
font = ImageFont.truetype("arial.ttf", fontsize)

w, h = draw.textsize(name, font=font)
draw.text((530 - w / 2, 675 - h / 2), name, (0, 0, 0), font=font, align="left")

invitation_img.save('result' + str(data['id']) + '.png')

--

--