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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -23
app.py CHANGED
@@ -4,49 +4,43 @@ from PIL import Image
4
  import io
5
  from zipfile import ZipFile
6
 
7
- def sepia_and_zip(input_img_path, num_copies):
8
- input_img = Image.open(input_img_path)
9
  input_img_np = np.array(input_img)
10
-
 
11
  sepia_filter = np.array([
12
  [0.393, 0.769, 0.189],
13
  [0.349, 0.686, 0.168],
14
  [0.272, 0.534, 0.131]
15
  ])
 
 
16
  input_img_np = input_img_np / 255.0
17
  sepia_img_np = np.dot(input_img_np[..., :3], sepia_filter.T)
18
  sepia_img_np = np.clip(sepia_img_np, 0, 1) * 255
19
  sepia_imgs = [(sepia_img_np).astype(np.uint8) for _ in range(num_copies)]
20
 
21
- # Convert numpy images to PIL images for gallery
22
  pil_images = [Image.fromarray(img) for img in sepia_imgs]
23
 
24
- # Prepare ZIP file
25
  zip_bytes_io = io.BytesIO()
26
  with ZipFile(zip_bytes_io, 'w') as zip_file:
27
  for i, img in enumerate(pil_images):
28
  img_byte_arr = io.BytesIO()
29
  img.save(img_byte_arr, format='PNG')
30
- img_byte_arr = img_byte_arr.getvalue()
31
- zip_file.writestr(f"sepia_image_{i}.png", img_byte_arr)
32
  zip_bytes_io.seek(0)
33
-
34
- # Return a gallery of images and a ZIP file for download
35
- return pil_images, zip_bytes_io
36
 
37
- title = "Sepia Tone Generator with Downloadable ZIP"
38
- 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."
39
- examples = []
40
 
41
  iface = gr.Interface(fn=sepia_and_zip,
42
- inputs=[gr.Image(type="filepath", label="Input Image"),
43
- gr.Number(label="Number of Copies")],
44
- outputs=[gr.Gallery(label="Sepia Images"),
45
- gr.File(label="Download ZIP")],
46
- title=title,
47
- description=description,
48
- examples=examples,
49
- allow_flagging="never",
50
- cache_examples=False)
51
 
52
- iface.launch(debug=True, enable_queue=False)
 
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)