Spaces:
Sleeping
Sleeping
File size: 3,749 Bytes
edd5871 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
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)")
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)
|