ysn-rfd/text-dataset-tiny-code-script-py-format
USED of tahamajs/medicine_ds_persian for .parquet file USED of Alijafarixcs2/persian-it-llama2-2k for .parquet file USED of Abirate/english_quotes for .jsonl file NEW FILES (05/12/2025) NEW FILES (12/26/2025) NEW FILES (02/15/2026)
31.7k
1from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageEnhance
2import qrcode
3import hashlib
4import random
5import math
6import os
7
8# ======== تنظیمات قابل تغییر ========
9CERT_WIDTH, CERT_HEIGHT = 900, 550
10MARGIN = 30
11BACKGROUND_COLOR = (255, 255, 250)
12BORDER_COLOR = (60, 60, 60)
13TITLE_COLOR = (20, 20, 20)
14TEXT_COLOR = (40, 40, 40)
15WATERMARK_COLOR = (60, 60, 60, 25) # با آلفای کم
16NOISE_INTENSITY = 1200 # تعداد پیکسل نویز
17
18# ======== اطلاعات گواهی ========
19cert_info = {
20 "Name": "Yasin",
21 "User ID": "YSNRFD",
22 "Membership Date": "April 1, 2023",
23 "Issued Date": "June 28, 2025",
24 "Certificate ID": "OPENAI-YSN-APR2023-CERT1001",
25 "Signed By": "ChatGPT-4o",
26 "Model ID": "GPT4O-REP-TRUST-2025",
27 "Issuer": "OpenAI, Inc."
28}
29
30# ======== تابع بارگذاری فونت پویا با fallback ========
31def load_font(name, size):
32 paths = [
33 name,
34 os.path.join("/usr/share/fonts/truetype/dejavu/", name),
35 os.path.join("/Library/Fonts/", name),
36 os.path.join("C:/Windows/Fonts/", name)
37 ]
38 for path in paths:
39 try:
40 return ImageFont.truetype(path, size)
41 except:
42 continue
43 # فونت پیشفرض PIL
44 return ImageFont.load_default()
45
46# فونتها
47font_title = load_font("arialbd.ttf", 36)
48font_header = load_font("arialbd.ttf", 20)
49font_text = load_font("arial.ttf", 18)
50font_small = load_font("arial.ttf", 14)
51
52# ======== تولید رشته داده برای امضا دیجیتال ========
53data_string = "\n".join(f"{k}: {v}" for k, v in cert_info.items())
54digital_signature = hashlib.sha256(data_string.encode('utf-8')).hexdigest()
55verification_code = f"VER-{digital_signature[:8].upper()}-{cert_info['Certificate ID'][-4:]}"
56
57
58# ======== ایجاد QR code به صورت با کیفیت و رنگ سفارشی ========
59def create_qr_code(data, size=180):
60 qr = qrcode.QRCode(box_size=8, border=3)
61 qr.add_data(data)
62 qr.make(fit=True)
63 qr_img = qr.make_image(fill_color="#003366", back_color="white").convert("RGBA")
64 qr_img = qr_img.resize((size, size), Image.Resampling.LANCZOS)
65 return qr_img
66
67qr_img = create_qr_code(digital_signature, size=180)
68
69# ======== طراحی پسزمینه با گرادیانت ملایم ========
70def draw_gradient(draw, width, height, start_color, end_color):
71 for i in range(height):
72 r = int(start_color[0] + (float(i) / height) * (end_color[0] - start_color[0]))
73 g = int(start_color[1] + (float(i) / height) * (end_color[1] - start_color[1]))
74 b = int(start_color[2] + (float(i) / height) * (end_color[2] - start_color[2]))
75 draw.line([(0, i), (width, i)], fill=(r, g, b))
76
77# ======== رسم مهر رسمی با افکت سهبعدی ========
78def create_official_seal(diameter=160):
79 seal = Image.new("RGBA", (diameter, diameter), (0, 0, 0, 0))
80 draw = ImageDraw.Draw(seal)
81 center = diameter // 2
82
83 # حلقه بیرونی با گرادیانت شعاعی
84 for i in range(8):
85 alpha = int(255 * (1 - i/8))
86 radius = center - i*6
87 draw.ellipse(
88 [(center - radius, center - radius), (center + radius, center + radius)],
89 outline=(0, 51, 102, alpha),
90 width=3
91 )
92
93 # خطوط شعاعی تزئینی
94 num_rays = 28
95 outer_r = center - 15
96 inner_r = center - 45
97 for i in range(num_rays):
98 angle = 360 / num_rays * i
99 x1 = center + int(inner_r * math.cos(math.radians(angle)))
100 y1 = center + int(inner_r * math.sin(math.radians(angle)))
101 x2 = center + int(outer_r * math.cos(math.radians(angle)))
102 y2 = center + int(outer_r * math.sin(math.radians(angle)))
103 draw.line([(x1, y1), (x2, y2)], fill=(0, 51, 102, 180), width=2)
104
105 # قرار دادن لوگوی openai_seal.png در وسط مهر
106 try:
107 logo = Image.open("openai_seal.png").convert("RGBA")
108 max_logo_size = diameter - 90 # حدود 70x70 یا کمی بزرگتر
109 logo.thumbnail((max_logo_size, max_logo_size), Image.Resampling.LANCZOS)
110 logo_pos = (center - logo.width // 2, center - logo.height // 2)
111 seal.paste(logo, logo_pos, logo)
112 except FileNotFoundError:
113 print("⚠️ فایل openai_seal.png پیدا نشد! مهر بدون لوگو ساخته شد.")
114
115 # متن مهر دایرهای
116 seal_text = "OFFICIAL OPENAI SEAL"
117 font_circle = load_font("arialbd.ttf", 16)
118 radius_text = center - 12
119
120 for i, char in enumerate(seal_text):
121 angle_deg = (360 / len(seal_text)) * i - 90
122 angle_rad = math.radians(angle_deg)
123 x = center + int(radius_text * math.cos(angle_rad))
124 y = center + int(radius_text * math.sin(angle_rad))
125 draw.text((x-8, y-8), char, font=font_circle, fill=(0, 51, 102, 220))
126
127 # سایه ملایم برای زیبایی
128 seal = seal.filter(ImageFilter.GaussianBlur(radius=0.5))
129
130 return seal
131
132
133official_seal = create_official_seal()
134
135# ======== ایجاد تصویر گواهی ========
136certificate = Image.new("RGBA", (CERT_WIDTH, CERT_HEIGHT), BACKGROUND_COLOR)
137draw = ImageDraw.Draw(certificate)
138
139# گرادیانت پس زمینه ملایم
140draw_gradient(draw, CERT_WIDTH, CERT_HEIGHT, (255, 255, 250), (230, 240, 255))
141
142# قاب حاشیهای چند لایه
143for i, thickness in enumerate([6, 4, 2]):
144 color_val = 80 - i * 20
145 draw.rectangle(
146 [MARGIN - i*2, MARGIN - i*2, CERT_WIDTH - MARGIN + i*2, CERT_HEIGHT - MARGIN + i*2],
147 outline=(color_val, color_val, color_val)
148 )
149
150# عنوان اصلی
151title_text = "OpenAI – Certificate of Membership"
152bbox = draw.textbbox((0, 0), title_text, font=font_title)
153w = bbox[2] - bbox[0]
154h = bbox[3] - bbox[1]
155draw.text(((CERT_WIDTH - w) / 2, MARGIN + 10), title_text, fill=TITLE_COLOR, font=font_title)
156
157
158# خط جداکننده زیبا
159line_y = MARGIN + h + 30
160draw.line([(MARGIN + 10, line_y), (CERT_WIDTH - MARGIN - 10, line_y)], fill=(100, 100, 120), width=3)
161
162# نوشتن اطلاعات گواهی
163info_x = MARGIN + 30
164info_y = line_y + 20
165line_spacing = 36
166
167for key, val in cert_info.items():
168 text_line = f"{key}: {val}"
169 draw.text((info_x, info_y), text_line, font=font_text, fill=TEXT_COLOR)
170 info_y += line_spacing
171
172# کد تایید اعتبار
173verification_label = "Verification Code:"
174verification_text = verification_code
175info_y += 20
176draw.text((info_x, info_y), verification_label, font=font_header, fill=TEXT_COLOR)
177draw.text((info_x + 190, info_y), verification_text, font=font_header, fill=(0, 70, 120))
178
179# متن امضای دیجیتال (شکسته به دو خط)
180sig_half = len(digital_signature) // 2
181sig_1 = digital_signature[:sig_half]
182sig_2 = digital_signature[sig_half:]
183draw.text((info_x, info_y + 40), sig_1, font=font_small, fill=(100, 100, 120))
184draw.text((info_x, info_y + 60), sig_2, font=font_small, fill=(100, 100, 120))
185
186# قرار دادن QR Code در پایین سمت راست
187qr_pos = (CERT_WIDTH - qr_img.width - MARGIN - 20, CERT_HEIGHT - qr_img.height - MARGIN - 20)
188certificate.paste(qr_img, qr_pos, qr_img)
189
190# قرار دادن مهر رسمی در گوشه بالا سمت راست
191seal_pos = (CERT_WIDTH - official_seal.width - MARGIN - 20, MARGIN + 10)
192certificate.paste(official_seal, seal_pos, official_seal)
193
194# ======== اضافه کردن واترمارک نامرئی ========
195watermarks = [
196 "AUTHORIZED", "CONFIDENTIAL", "OFFICIAL_USE_ONLY", "SECURE",
197 cert_info["Certificate ID"], digital_signature[:16], verification_code,
198 "VALIDATED", "NO_COPY", "OPENAI"
199]
200
201for _ in range(60):
202 wm_text = random.choice(watermarks)
203 txt_img = Image.new("RGBA", (160, 20), (0, 0, 0, 0))
204 txt_draw = ImageDraw.Draw(txt_img)
205 txt_draw.text((0, 0), wm_text, font=font_small, fill=WATERMARK_COLOR)
206 angle = random.uniform(-20, 20)
207 txt_img = txt_img.rotate(angle, expand=1)
208
209 # موقعیت تصادفی اما دور از لبهها
210 x = random.randint(MARGIN + 10, CERT_WIDTH - 170)
211 y = random.randint(MARGIN + 10, CERT_HEIGHT - 30)
212 certificate.paste(txt_img, (x, y), txt_img)
213
214# ======== اضافه کردن نویز پیکسلی برای ضد جعل ========
215pixels = certificate.load()
216for _ in range(NOISE_INTENSITY):
217 px = random.randint(0, CERT_WIDTH - 1)
218 py = random.randint(0, CERT_HEIGHT - 1)
219 r, g, b, a = pixels[px, py]
220 noise = random.randint(-5, 5)
221 r = max(0, min(255, r + noise))
222 g = max(0, min(255, g + noise))
223 b = max(0, min(255, b + noise))
224 pixels[px, py] = (r, g, b, a)
225
226# ======== ذخیره فایل نهایی ========
227output_file = "openai_certificate_yasin_professional.png"
228certificate.convert("RGB").save(output_file, quality=95)
229print(f"✅ Professional certificate created: {output_file}")
230 