Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image, ImageDraw, ImageFont | |
import cv2 | |
import numpy as np | |
import time | |
import random | |
import os | |
import requests | |
# Muat gambar dasar (gambar.png) | |
gambar_dasar = cv2.imread("gambar.png") | |
def tambahkan_teks_di_tengah_dengan_offset_y(teks, email): | |
# Konversi gambar OpenCV (numpy array) ke PIL image | |
print(email) | |
url = "https://daurah.al-wafi.sch.id/api/cert/" + email | |
response = requests.get(url) | |
data = response.json() | |
if data.get("message") == "not eligible": | |
return "Error" | |
gambar = cv2.imread("gambar.png") | |
offset_y = -240 | |
gambar_pil = Image.fromarray(cv2.cvtColor(gambar, cv2.COLOR_BGR2RGB)) | |
draw = ImageDraw.Draw(gambar_pil) | |
# Gunakan font yang mendukung karakter Arab | |
font_path = "Arial.ttf" # Ganti dengan path ke file font .ttf Anda | |
font_size = 68 # Ukuran font | |
font = ImageFont.truetype(font_path, font_size) | |
# Ukur ukuran teks | |
lebar_teks, tinggi_teks = draw.textsize(teks, font=font) | |
# Hitung posisi teks | |
tinggi, lebar = gambar.shape[:2] | |
posisi_x = (lebar - lebar_teks) // 2 | |
posisi_y = (tinggi - tinggi_teks) // 2 + offset_y | |
# Tambahkan teks ke gambar | |
draw.text((posisi_x, posisi_y), teks, font=font, fill="black") | |
# Konversi kembali ke gambar OpenCV (numpy array) | |
gambar = cv2.cvtColor(np.array(gambar_pil), cv2.COLOR_RGB2BGR) | |
#Buat nama file hasil dengan nomor acak | |
current_time = int(time.time()) | |
random_numbers = ''.join(random.choices('0123456789', k=5)) | |
hasil_filename = f'{teks}_{random_numbers}.jpeg' | |
hasil_path = os.path.join('static', 'cert2', hasil_filename) | |
height, width = gambar.shape[:2] | |
center_x = width // 2 | |
center_y = height // 2 | |
new_width = width // 2 | |
new_height = height // 2 | |
# Mengubah ukuran gambar | |
gambar = cv2.resize(gambar, (new_width, new_height)) | |
cv2.imwrite(hasil_path, gambar) | |
return cv2.cvtColor(np.array(gambar), cv2.COLOR_RGB2BGR) | |
# Fungsi untuk menambahkan teks ke gambar | |
def tambahkan_teks(text, offset_y, font_size=68): | |
img = cv2.imread("gambar.png") | |
offset_y = -240 | |
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) | |
draw = ImageDraw.Draw(img) | |
# Gunakan font (pastikan Anda memiliki Arial.ttf atau font yang mendukung karakter Arab) | |
font_path = "Arial.ttf" | |
font = ImageFont.truetype(font_path, font_size) | |
# Hitung posisi teks | |
lebar_teks, tinggi_teks = draw.textsize(text, font=font) | |
tinggi, lebar = img.size | |
posisi_x = (lebar - lebar_teks) // 2 | |
posisi_y = (tinggi - tinggi_teks) // 2 + offset_y | |
# Tambahkan teks | |
draw.text((posisi_x, posisi_y), text, font=font, fill="black") | |
# Simpan gambar dengan nama file unik | |
current_time = int(time.time()) | |
random_numbers = ''.join(random.choices('0123456789', k=5)) | |
hasil_filename = f'{text}_{random_numbers}.jpeg' | |
hasil_path = os.path.join('cert2', hasil_filename) | |
img.save(hasil_path) | |
return cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) | |
# Gradio interface | |
with gr.Blocks() as demo: | |
gr.Markdown("# Tambahkan Nama ke Sertifikat (Hanya sekali download). Tombol download ada di sisi kanan atas sertifikat (Hanya Sekali Download)") | |
with gr.Row(): | |
text_input = gr.Textbox(label="Nama (Arab)") # Input teks tanpa nilai awal | |
email_input = gr.Textbox(label="Email") | |
offset_y_input = gr.Slider(-1500, 300, value=-240, step=10, label="Offset Vertikal (Y)") | |
font_size_input = gr.Slider(30, 100, value=68, step=5, label="Ukuran Font") | |
image_output = gr.Image(label="Hasil") | |
btn_process = gr.Button("Proses Sertifikat") | |
btn_process.click( | |
tambahkan_teks_di_tengah_dengan_offset_y, | |
inputs=[text_input, email_input], | |
outputs=image_output, | |
) | |
demo.launch(debug=True) | |