Rahatara commited on
Commit
8579fd1
·
verified ·
1 Parent(s): 6b7517b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -37
app.py CHANGED
@@ -1,46 +1,45 @@
1
- import gradio as gr
2
  import numpy as np
3
- from PIL import Image
4
- import io
 
5
  from zipfile import ZipFile
6
 
7
- def sepia_and_zip(input_img, num_copies):
8
- # Convert input_img from Image format to NumPy array
9
- input_img_np = np.array(input_img)
10
-
11
- # Define the sepia filter
12
  sepia_filter = np.array([
13
- [0.393, 0.769, 0.189],
14
- [0.349, 0.686, 0.168],
15
  [0.272, 0.534, 0.131]
16
  ])
 
 
 
 
 
17
 
18
- # Apply sepia filter
19
- input_img_np = input_img_np / 255.0
20
- sepia_img_np = np.dot(input_img_np[..., :3], sepia_filter.T)
21
- sepia_img_np = np.clip(sepia_img_np, 0, 1) * 255
22
- sepia_imgs = [(sepia_img_np).astype(np.uint8) for _ in range(num_copies)]
23
-
24
- # Convert NumPy images back to PIL images for output
25
- pil_images = [Image.fromarray(img) for img in sepia_imgs]
26
-
27
- # Prepare the ZIP file in-memory
28
- zip_bytes_io = io.BytesIO()
29
- with ZipFile(zip_bytes_io, 'w') as zip_file:
30
- for i, img in enumerate(pil_images):
31
- img_byte_arr = io.BytesIO()
32
- img.save(img_byte_arr, format='PNG')
33
- img_byte_arr.seek(0)
34
- zip_file.writestr(f"sepia_image_{i}.png", img_byte_arr.read())
35
- zip_bytes_io.seek(0)
36
 
37
- # Return values: Gallery images and the ZIP file as a tuple (BytesIO, filename)
38
- return pil_images, ("sepia_images.zip", zip_bytes_io)
39
-
40
- iface = gr.Interface(fn=sepia_and_zip,
41
- inputs=[gr.Image(label="Input Image"), gr.Number(label="Number of Copies", default=1)],
42
- outputs=[gr.Gallery(label="Sepia Images"), gr.File(label="Download ZIP")],
43
- title="Sepia Tone Generator with Downloadable ZIP",
44
- description="Upload an image and select the number of sepia-toned copies you want. View the images in a gallery and download them all as a ZIP file.")
 
 
 
 
 
45
 
46
- iface.launch(debug=True)
 
 
1
+ mport gradio as gr
2
  import numpy as np
3
+ import tempfile
4
+ import shutil
5
+ import os
6
  from zipfile import ZipFile
7
 
8
+ def sepia(input_img, num_copies):
 
 
 
 
9
  sepia_filter = np.array([
10
+ [0.393, 0.769, 0.189],
11
+ [0.349, 0.686, 0.168],
12
  [0.272, 0.534, 0.131]
13
  ])
14
+ input_img = input_img / 255.0
15
+ sepia_img = np.dot(input_img[..., :3], sepia_filter.T)
16
+ sepia_img = np.clip(sepia_img, 0, 1) * 255
17
+ sepia_imgs = [(sepia_img).astype(np.uint8) for _ in range(num_copies)]
18
+ return sepia_imgs
19
 
20
+ def zip_sepia_images(sepia_imgs):
21
+ temp_dir = tempfile.mkdtemp()
22
+ zip_path = os.path.join(temp_dir, "sepia_images.zip")
23
+ with ZipFile(zip_path, 'w') as zipf:
24
+ for i, img in enumerate(sepia_imgs):
25
+ img_path = os.path.join(temp_dir, f"sepia_image_{i}.png")
26
+ gr.utils.save_image(img_path, img)
27
+ zipf.write(img_path, os.path.basename(img_path))
28
+ return zip_path
 
 
 
 
 
 
 
 
 
29
 
30
+ with gr.Blocks() as demo:
31
+ with gr.Row():
32
+ input_img = gr.Image()
33
+ num_copies = gr.Number(label="Number of Copies", value=1)
34
+ gallery = gr.Gallery(label="Sepia Images")
35
+ download_btn = gr.File(label="Download ZIP", visible=False)
36
+
37
+ input_img.change(fn=lambda x: x, inputs=input_img, outputs=gallery)
38
+ num_copies.change(fn=lambda x: x, inputs=num_copies, outputs=gallery)
39
+
40
+ generate_btn = gr.Button("Generate Sepia Images")
41
+ generate_btn.click(fn=sepia, inputs=[input_img, num_copies], outputs=gallery)
42
+ generate_btn.click(fn=zip_sepia_images, inputs=gallery, outputs=download_btn)
43
 
44
+ if __name__ == "__main__":
45
+ demo.launch()