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.6k
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# ======== ایجاد QR code به صورت با کیفیت و رنگ سفارشی ========
58def create_qr_code(data, size=180):
59 qr = qrcode.QRCode(box_size=8, border=3)
60 qr.add_data(data)
61 qr.make(fit=True)
62 qr_img = qr.make_image(fill_color="#003366", back_color="white").convert("RGBA")
63 qr_img = qr_img.resize((size, size), Image.Resampling.LANCZOS)
64 return qr_img
65
66qr_img = create_qr_code(digital_signature, size=180)
67
68# ======== طراحی پسزمینه با گرادیانت ملایم ========
69def draw_gradient(draw, width, height, start_color, end_color):
70 for i in range(height):
71 r = int(start_color[0] + (float(i) / height) * (end_color[0] - start_color[0]))
72 g = int(start_color[1] + (float(i) / height) * (end_color[1] - start_color[1]))
73 b = int(start_color[2] + (float(i) / height) * (end_color[2] - start_color[2]))
74 draw.line([(0, i), (width, i)], fill=(r, g, b))
75
76# ======== رسم مهر رسمی با افکت سهبعدی ========
77def create_official_seal(diameter=160):
78 seal = Image.new("RGBA", (diameter, diameter), (0, 0, 0, 0))
79 draw = ImageDraw.Draw(seal)
80 center = diameter // 2
81
82 # حلقه بیرونی با گرادیانت شعاعی
83 for i in range(8):
84 alpha = int(255 * (1 - i/8))
85 radius = center - i*6
86 draw.ellipse(
87 [(center - radius, center - radius), (center + radius, center + radius)],
88 outline=(0, 51, 102, alpha),
89 width=3
90 )
91
92 # خطوط شعاعی تزئینی
93 num_rays = 28
94 outer_r = center - 15
95 inner_r = center - 45
96 for i in range(num_rays):
97 angle = 360 / num_rays * i
98 x1 = center + int(inner_r * math.cos(math.radians(angle)))
99 y1 = center + int(inner_r * math.sin(math.radians(angle)))
100 x2 = center + int(outer_r * math.cos(math.radians(angle)))
101 y2 = center + int(outer_r * math.sin(math.radians(angle)))
102 draw.line([(x1, y1), (x2, y2)], fill=(0, 51, 102, 180), width=2)
103
104 # قرار دادن لوگوی openai_seal.png در وسط مهر
105 try:
106 logo = Image.open("openai_seal.png").convert("RGBA")
107 max_logo_size = diameter - 90 # حدود 70x70 یا کمی بزرگتر
108 logo.thumbnail((max_logo_size, max_logo_size), Image.Resampling.LANCZOS)
109 logo_pos = (center - logo.width // 2, center - logo.height // 2)
110 seal.paste(logo, logo_pos, logo)
111 except FileNotFoundError:
112 print("⚠️ فایل openai_seal.png پیدا نشد! مهر بدون لوگو ساخته شد.")
113
114 # متن مهر دایرهای
115 seal_text = "OFFICIAL OPENAI SEAL"
116 font_circle = load_font("arialbd.ttf", 16)
117 radius_text = center - 12
118
119 for i, char in enumerate(seal_text):
120 angle_deg = (360 / len(seal_text)) * i - 90
121 angle_rad = math.radians(angle_deg)
122 x = center + int(radius_text * math.cos(angle_rad))
123 y = center + int(radius_text * math.sin(angle_rad))
124 draw.text((x-8, y-8), char, font=font_circle, fill=(0, 51, 102, 220))
125
126 # سایه ملایم برای زیبایی
127 seal = seal.filter(ImageFilter.GaussianBlur(radius=0.5))
128
129 return seal
130
131official_seal = create_official_seal()
132
133# ======== ایجاد تصویر گواهی ========
134certificate = Image.new("RGBA", (CERT_WIDTH, CERT_HEIGHT), BACKGROUND_COLOR)
135draw = ImageDraw.Draw(certificate)
136
137# گرادیانت پس زمینه ملایم
138draw_gradient(draw, CERT_WIDTH, CERT_HEIGHT, (255, 255, 250), (230, 240, 255))
139
140# قاب حاشیهای چند لایه
141for i, thickness in enumerate([6, 4, 2]):
142 color_val = 80 - i * 20
143 draw.rectangle(
144 [MARGIN - i*2, MARGIN - i*2, CERT_WIDTH - MARGIN + i*2, CERT_HEIGHT - MARGIN + i*2],
145 outline=(color_val, color_val, color_val)
146 )
147
148# عنوان اصلی
149title_text = "OpenAI – Certificate of Membership"
150bbox = draw.textbbox((0, 0), title_text, font=font_title)
151w = bbox[2] - bbox[0]
152h = bbox[3] - bbox[1]
153draw.text(((CERT_WIDTH - w) / 2, MARGIN + 10), title_text, fill=TITLE_COLOR, font=font_title)
154
155# خط جداکننده زیبا
156line_y = MARGIN + h + 30
157draw.line([(MARGIN + 10, line_y), (CERT_WIDTH - MARGIN - 10, line_y)], fill=(100, 100, 120), width=3)
158
159# نوشتن اطلاعات گواهی
160info_x = MARGIN + 30
161info_y = line_y + 20
162line_spacing = 36
163
164for key, val in cert_info.items():
165 text_line = f"{key}: {val}"
166 draw.text((info_x, info_y), text_line, font=font_text, fill=TEXT_COLOR)
167 info_y += line_spacing
168
169# کد تایید اعتبار
170verification_label = "Verification Code:"
171verification_text = verification_code
172info_y += 20
173draw.text((info_x, info_y), verification_label, font=font_header, fill=TEXT_COLOR)
174draw.text((info_x + 190, info_y), verification_text, font=font_header, fill=(0, 70, 120))
175
176# متن امضای دیجیتال (شکسته به دو خط)
177sig_half = len(digital_signature) // 2
178sig_1 = digital_signature[:sig_half]
179sig_2 = digital_signature[sig_half:]
180draw.text((info_x, info_y + 40), sig_1, font=font_small, fill=(100, 100, 120))
181draw.text((info_x, info_y + 60), sig_2, font=font_small, fill=(100, 100, 120))
182
183# قرار دادن QR Code در پایین سمت راست
184qr_pos = (CERT_WIDTH - qr_img.width - MARGIN - 20, CERT_HEIGHT - qr_img.height - MARGIN - 20)
185
186# قرار دادن مهر رسمی بالای QR Code
187seal_pos = (qr_pos[0], qr_pos[1] - official_seal.height - 15) # 15 پیکسل فاصله بالاتر
188
189certificate.paste(official_seal, seal_pos, official_seal)
190certificate.paste(qr_img, qr_pos, qr_img)
191
192# ======== متنهای واترمارک عجیبتر و معتبرتر ========
193watermarks = [
194 "AUTHORIZED", "CONFIDENTIAL", "OFFICIAL_USE_ONLY", "SECURE",
195 "AUTHENTICATED", "NON-TRANSFERABLE", "GOVERNMENT APPROVED", "VERIFIED BY BLOCKCHAIN",
196 "HIGHLY CONFIDENTIAL", "DIGITAL SIGNED", "SECURE DOCUMENT", "UNIQUE IDENTIFIER",
197 "ENCRYPTED SEAL",
198 cert_info["Certificate ID"], digital_signature[:16], verification_code,
199 "VALIDATED", "NO_COPY", "OPENAI"
200]
201
202# ======== اضافه کردن واترمارک نامرئی با فونت کوچک و زاویه تصادفی ========
203for _ in range(80): # تعداد را کمی بیشتر کردم
204 wm_text = random.choice(watermarks)
205 txt_img = Image.new("RGBA", (220, 20), (0, 0, 0, 0))
206 txt_draw = ImageDraw.Draw(txt_img)
207 txt_draw.text((0, 0), wm_text, font=font_small, fill=WATERMARK_COLOR)
208 angle = random.uniform(-25, 25)
209 txt_img = txt_img.rotate(angle, expand=1)
210
211 # موقعیت تصادفی اما دور از لبهها
212 x = random.randint(MARGIN + 10, CERT_WIDTH - 230)
213 y = random.randint(MARGIN + 10, CERT_HEIGHT - 30)
214 certificate.paste(txt_img, (x, y), txt_img)
215
216# ======== اضافه کردن نویز پیکسلی برای ضد جعل ========
217pixels = certificate.load()
218for _ in range(NOISE_INTENSITY):
219 px = random.randint(0, CERT_WIDTH - 1)
220 py = random.randint(0, CERT_HEIGHT - 1)
221 r, g, b, a = pixels[px, py]
222 noise = random.randint(-5, 5)
223 r = max(0, min(255, r + noise))
224 g = max(0, min(255, g + noise))
225 b = max(0, min(255, b + noise))
226 pixels[px, py] = (r, g, b, a)
227
228# ======== ذخیره فایل نهایی ========
229output_file = "openai_certificate_yasin_professional.png"
230certificate.convert("RGB").save(output_file, quality=95)
231print(f"✅ Professional certificate created: {output_file}")
232 