snackshell commited on
Commit
e86d5f6
·
verified ·
1 Parent(s): 9aeab3c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -15
app.py CHANGED
@@ -18,28 +18,37 @@ EXECUTOR = ThreadPoolExecutor(max_workers=2)
18
 
19
  # ===== WATERMARK FUNCTION =====
20
  def add_watermark(image_bytes):
21
- """Add clean watermark with small text in bottom-right"""
22
  try:
23
  image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
24
- draw = ImageDraw.Draw(image)
25
 
26
- # Font setup (smaller size)
 
 
 
 
 
 
 
27
  font_size = 24
28
  try:
29
  font = ImageFont.truetype("Roboto-Bold.ttf", font_size)
30
  except:
31
  font = ImageFont.load_default(font_size)
32
 
33
- # Positioning (10px margin from edges)
34
  text_width = draw.textlength(WATERMARK_TEXT, font=font)
35
- x = image.width - text_width - 10
36
- y = image.height - 34 # Slightly above bottom edge
 
 
 
37
 
38
- # Draw white text with slight shadow for readability
39
- draw.text((x+1, y+1), WATERMARK_TEXT, font=font, fill=(0, 0, 0, 128)) # Shadow
40
- draw.text((x, y), WATERMARK_TEXT, font=font, fill=(255, 255, 255)) # Main text
 
 
41
 
42
- return image
43
  except Exception as e:
44
  print(f"Watermark error: {str(e)}")
45
  return Image.open(io.BytesIO(image_bytes))
@@ -89,11 +98,14 @@ def generate_image(prompt):
89
  return None, "⚠️ Failed after multiple attempts. Please try later."
90
 
91
  # ===== GRADIO INTERFACE =====
92
- theme = gr.themes.Default(
93
- primary_hue="emerald",
94
- secondary_hue="amber",
95
- font=[gr.themes.GoogleFont("Poppins"), "Arial", "sans-serif"]
96
- )
 
 
 
97
 
98
  with gr.Blocks(theme=theme, title="SelamGPT Image Generator") as demo:
99
  gr.Markdown("""
 
18
 
19
  # ===== WATERMARK FUNCTION =====
20
  def add_watermark(image_bytes):
21
+ """Convert to PNG with medium quality before watermarking"""
22
  try:
23
  image = Image.open(io.BytesIO(image_bytes)).convert("RGB")
 
24
 
25
+ # Save as medium-quality PNG to buffer
26
+ png_buffer = io.BytesIO()
27
+ image.save(png_buffer, format="PNG", optimize=True, quality=85) # Medium quality
28
+ png_buffer.seek(0)
29
+
30
+ # Add watermark to the PNG
31
+ watermarked_image = Image.open(png_buffer)
32
+ draw = ImageDraw.Draw(watermarked_image)
33
  font_size = 24
34
  try:
35
  font = ImageFont.truetype("Roboto-Bold.ttf", font_size)
36
  except:
37
  font = ImageFont.load_default(font_size)
38
 
 
39
  text_width = draw.textlength(WATERMARK_TEXT, font=font)
40
+ x = watermarked_image.width - text_width - 10
41
+ y = watermarked_image.height - 34
42
+
43
+ draw.text((x+1, y+1), WATERMARK_TEXT, font=font, fill=(0, 0, 0, 128))
44
+ draw.text((x, y), WATERMARK_TEXT, font=font, fill=(255, 255, 255))
45
 
46
+ # Return as PNG bytes
47
+ final_buffer = io.BytesIO()
48
+ watermarked_image.save(final_buffer, format="PNG", optimize=True, quality=85)
49
+ final_buffer.seek(0)
50
+ return Image.open(final_buffer)
51
 
 
52
  except Exception as e:
53
  print(f"Watermark error: {str(e)}")
54
  return Image.open(io.BytesIO(image_bytes))
 
98
  return None, "⚠️ Failed after multiple attempts. Please try later."
99
 
100
  # ===== GRADIO INTERFACE =====
101
+ with gr.Blocks() as demo:
102
+
103
+ output_image = gr.Image(
104
+ label="Generated Image",
105
+ type="pil", # Force PIL/PNG output
106
+ format="png", # Explicit PNG format
107
+ height=512
108
+ )
109
 
110
  with gr.Blocks(theme=theme, title="SelamGPT Image Generator") as demo:
111
  gr.Markdown("""