aW1wb3J0IG1hdHBsb3RsaWIucHlwbG90IGFzIHBsdApmcm9tIFBJTCBpbXBvcnQgSW1hZ2UsIEltYWdlRHJhdywgSW1hZ2VGb250CgojIFThuqFvIOG6o25oIHRy4bqvbmcgKFJHQkEpIHbhu5tpIG7hu4FuIHRyb25nIHN14buRdApzZWFsX3NpemUgPSA4MDAKaW1hZ2UgPSBJbWFnZS5uZXcoJ1JHQkEnLCAoc2VhbF9zaXplLCBzZWFsX3NpemUpLCAoMjU1LCAyNTUsIDI1NSwgMCkpCmRyYXcgPSBJbWFnZURyYXcuRHJhdyhpbWFnZSkKCiMgQ+G6pXUgaCZpZ3JhdmU7bmgKY2VudGVyID0gc2VhbF9zaXplIC8vIDIKcmFkaXVzX291dGVyID0gMzcwCnJhZGl1c19pbm5lciA9IDI3MAoKIyBGb250IChk4buxIHBoJm9ncmF2ZTtuZywga2gmb2NpcmM7bmcgZCZ1Z3JhdmU7bmcgZm9udCB0aeG6v25nIFZp4buHdCDEkeG6t2MgYmnhu4d0IGRvIGjhuqFuIGNo4bq/IG0mb2NpcmM7aSB0csaw4budbmcpCmZvbnRfcGF0aCA9ICZxdW90Oy91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvZGVqYXZ1L0RlamFWdVNhbnMtQm9sZC50dGYmcXVvdDsKZm9udF9sYXJnZSA9IEltYWdlRm9udC50cnVldHlwZShmb250X3BhdGgsIDM4KQpmb250X21lZGl1bSA9IEltYWdlRm9udC50cnVldHlwZShmb250X3BhdGgsIDM0KQoKIyBW4bq9IHYmb2dyYXZlO25nIHRyJm9ncmF2ZTtuIG5nbyZhZ3JhdmU7aSB2JmFncmF2ZTsgdHJvbmcKZHJhdy5lbGxpcHNlKAogICAgKGNlbnRlciAtIHJhZGl1c19vdXRlciwgY2VudGVyIC0gcmFkaXVzX291dGVyLCBjZW50ZXIgKyByYWRpdXNfb3V0ZXIsIGNlbnRlciArIHJhZGl1c19vdXRlciksCiAgICBvdXRsaW5lPSdyZWQnLCB3aWR0aD0xMAopCmRyYXcuZWxsaXBzZSgKICAgIChjZW50ZXIgLSByYWRpdXNfaW5uZXIsIGNlbnRlciAtIHJhZGl1c19pbm5lciwgY2VudGVyICsgcmFkaXVzX2lubmVyLCBjZW50ZXIgKyByYWRpdXNfaW5uZXIpLAogICAgb3V0bGluZT0ncmVkJywgd2lkdGg9NAopCgojIFZp4bq/dCBjaOG7ryBuZ28mYWdyYXZlO2kgdiZvZ3JhdmU7bmcgdHImb2dyYXZlO24Kb3V0ZXJfdGV4dCA9ICZxdW90O8SQTyZBZ3JhdmU7TiBUTkNTIEjhu5IgQ0gmSWFjdXRlOyBNSU5IJnF1b3Q7CmJvdHRvbV90ZXh0ID0gJnF1b3Q7VOG7iE5IIEImSWdyYXZlO05IIMSQ4buKTkgmcXVvdDsKCiMgVuG6vSBjaOG7ryBjaOG6oXkgdiZvZ3JhdmU7bmcgY3VuZyAoZyZvYWN1dGU7YyBraG/huqNuZyAxODAgxJHhu5kpCmZvciBpLCBjaGFyIGluIGVudW1lcmF0ZShvdXRlcl90ZXh0KToKICAgIGFuZ2xlID0gLTkwIC0gKGxlbihvdXRlcl90ZXh0KSAvIDIgLSBpKSAqIDgKICAgIHggPSBjZW50ZXIgKyByYWRpdXNfb3V0ZXIgKiAwLjg1ICogbnAuY29zKG5wLnJhZGlhbnMoYW5nbGUpKQogICAgeSA9IGNlbnRlciArIHJhZGl1c19vdXRlciAqIDAuODUgKiBucC5zaW4obnAucmFkaWFucyhhbmdsZSkpCiAgICBkcmF3LnRleHQoKHgsIHkpLCBjaGFyLCBmb250PWZvbnRfbWVkaXVtLCBmaWxsPSdyZWQnLCBhbmNob3I9J21tJykKCiMgVuG6vSBjaOG7ryBkxrDhu5tpIChU4buITkggQiZJZ3JhdmU7TkggxJDhu4pOSCkKZm9yIGksIGNoYXIgaW4gZW51bWVyYXRlKGJvdHRvbV90ZXh0KToKICAgIGFuZ2xlID0gOTAgKyAobGVuKGJvdHRvbV90ZXh0KSAvIDIgLSBpKSAqIDgKICAgIHggPSBjZW50ZXIgKyByYWRpdXNfb3V0ZXIgKiAwLjg1ICogbnAuY29zKG5wLnJhZGlhbnMoYW5nbGUpKQogICAgeSA9IGNlbnRlciArIHJhZGl1c19vdXRlciAqIDAuODUgKiBucC5zaW4obnAucmFkaWFucyhhbmdsZSkpCiAgICBkcmF3LnRleHQoKHgsIHkpLCBjaGFyLCBmb250PWZvbnRfbWVkaXVtLCBmaWxsPSdyZWQnLCBhbmNob3I9J21tJykKCiMgVmnhur90IGNo4buvIGdp4buvYQpkcmF3LnRleHQoKGNlbnRlciwgY2VudGVyIC0gMjApLCAmcXVvdDtCQU4gQ0jhuqRQIEgmQWdyYXZlO05IJnF1b3Q7LCBmb250PWZvbnRfbGFyZ2UsIGZpbGw9J3JlZCcsIGFuY2hvcj0nbW0nKQpkcmF3LnRleHQoKGNlbnRlciwgY2VudGVyICsgMzApLCAmcXVvdDtU4buITkggxJBPJkFncmF2ZTtOJnF1b3Q7LCBmb250PWZvbnRfbGFyZ2UsIGZpbGw9J3JlZCcsIGFuY2hvcj0nbW0nKQoKIyBIaeG7g24gdGjhu4sKcGx0Lmltc2hvdyhpbWFnZSkKcGx0LmF4aXMoJ29mZicpCnBsdC50aXRsZSgmcXVvdDtE4bqldSBt4buZYyBwaOG7pWMgZOG7sW5nIChz4buRIGgmb2FjdXRlO2EpJnF1b3Q7KQpwbHQuc2hvdygp
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont
# Tạo ảnh trắng (RGBA) với nền trong suốt
seal_size = 800
image = Image.new('RGBA', (seal_size, seal_size), (255, 255, 255, 0))
draw = ImageDraw.Draw(image)
# Cấu hình
center = seal_size // 2
radius_outer = 370
radius_inner = 270
# Font (dự phòng, không dùng font tiếng Việt đặc biệt do hạn chế môi trường)
font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"
font_large = ImageFont.truetype(font_path, 38)
font_medium = ImageFont.truetype(font_path, 34)
# Vẽ vòng tròn ngoài và trong
draw.ellipse(
(center - radius_outer, center - radius_outer, center + radius_outer, center + radius_outer),
outline='red', width=10
)
draw.ellipse(
(center - radius_inner, center - radius_inner, center + radius_inner, center + radius_inner),
outline='red', width=4
)
# Viết chữ ngoài vòng tròn
outer_text = "ĐOÀN TNCS HỒ CHÍ MINH"
bottom_text = "TỈNH BÌNH ĐỊNH"
# Vẽ chữ chạy vòng cung (góc khoảng 180 độ)
for i, char in enumerate(outer_text):
angle = -90 - (len(outer_text) / 2 - i) * 8
x = center + radius_outer * 0.85 * np.cos(np.radians(angle))
y = center + radius_outer * 0.85 * np.sin(np.radians(angle))
draw.text((x, y), char, font=font_medium, fill='red', anchor='mm')
# Vẽ chữ dưới (TỈNH BÌNH ĐỊNH)
for i, char in enumerate(bottom_text):
angle = 90 + (len(bottom_text) / 2 - i) * 8
x = center + radius_outer * 0.85 * np.cos(np.radians(angle))
y = center + radius_outer * 0.85 * np.sin(np.radians(angle))
draw.text((x, y), char, font=font_medium, fill='red', anchor='mm')
# Viết chữ giữa
draw.text((center, center - 20), "BAN CHẤP HÀNH", font=font_large, fill='red', anchor='mm')
draw.text((center, center + 30), "TỈNH ĐOÀN", font=font_large, fill='red', anchor='mm')
# Hiển thị
plt.imshow(image)
plt.axis('off')
plt.title("Dấu mộc phục dựng (số hóa)")
plt.show()