CSB261 commited on
Commit
673e0b5
ยท
verified ยท
1 Parent(s): 229d6fe

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -14
app.py CHANGED
@@ -3,6 +3,7 @@ from PIL import Image, ImageEnhance, ImageOps, ImageFilter
3
  import io
4
  import base64
5
  import tempfile
 
6
 
7
  def image_to_base64(img):
8
  """
@@ -36,39 +37,75 @@ def transform_image(image, contrast, brightness, blur):
36
 
37
  def generate_comparison_html(original_base64, transformed_base64):
38
  """
39
- ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€์™€ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ง ์Šฌ๋ผ์ด๋” HTML์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
40
  ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์Šฌ๋ผ์ด๋”๋ฅผ ์›€์ง์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
41
  """
42
  html = f"""
43
  <div style="position: relative; width: 100%; max-width: 600px; margin: auto;">
44
- <img src="data:image/jpeg;base64,{transformed_base64}" style="width: 100%;">
45
- <div id="overlay" style="position: absolute; top:0; left:0; height:50%; overflow: hidden; width:100%;">
 
 
 
46
  <img src="data:image/jpeg;base64,{original_base64}" style="width: 100%;">
47
  </div>
 
 
48
  <input type="range" min="0" max="100" value="50"
49
- oninput="document.getElementById('overlay').style.height = this.value + '%';"
50
  style="
51
  position: absolute;
52
- top: 10px;
53
- right: 10px;
54
- transform: rotate(270deg);
55
- transform-origin: center;
56
- width: 300px;
57
- height: 80px;
58
- -webkit-appearance: slider-vertical;
59
- writing-mode: bt-lr; /* IE */
60
  background: transparent;
61
  ">
 
 
62
  <div style="text-align: center; margin-top: 10px;">
63
  <span>๋ณ€ํ™˜ ํ›„</span> <span style="float: right;">๋ณ€ํ™˜ ์ „</span>
64
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  </div>
66
  """
67
  return html
68
 
69
  def process_image(image, contrast, brightness, blur):
70
  """
71
- ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ , ๋น„๊ต ์Šฌ๋ผ์ด๋“œ์™€ ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
72
  """
73
  if image is None:
74
  return "์ด๋ฏธ์ง€๊ฐ€ ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.", None
@@ -92,7 +129,7 @@ def process_image(image, contrast, brightness, blur):
92
 
93
  with gr.Blocks() as demo:
94
  gr.Markdown("## ๐Ÿ“ธ ๋ถ„์œ„๊ธฐ ์žˆ๋Š” ํ‘๋ฐฑ ์‚ฌ์ง„ ๋ณ€ํ™˜๊ธฐ")
95
- gr.Markdown("์›๋ณธ ์ด๋ฏธ์ง€์™€ ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ง ์Šฌ๋ผ์ด๋”๋กœ ๋น„๊ตํ•˜๊ณ , ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
96
 
97
  with gr.Row():
98
  with gr.Column():
 
3
  import io
4
  import base64
5
  import tempfile
6
+ import os
7
 
8
  def image_to_base64(img):
9
  """
 
37
 
38
  def generate_comparison_html(original_base64, transformed_base64):
39
  """
40
+ ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€์™€ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜ํ‰ ์Šฌ๋ผ์ด๋” HTML์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
41
  ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์Šฌ๋ผ์ด๋”๋ฅผ ์›€์ง์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
42
  """
43
  html = f"""
44
  <div style="position: relative; width: 100%; max-width: 600px; margin: auto;">
45
+ <!-- ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€ (๋ฐฐ๊ฒฝ) -->
46
+ <img src="data:image/jpeg;base64,{transformed_base64}" style="width: 100%; display: block;">
47
+
48
+ <!-- ์›๋ณธ ์ด๋ฏธ์ง€ (์˜ค๋ฒ„๋ ˆ์ด) -->
49
+ <div id="overlay" style="position: absolute; top:0; left:0; width:50%; overflow: hidden; height:100%;">
50
  <img src="data:image/jpeg;base64,{original_base64}" style="width: 100%;">
51
  </div>
52
+
53
+ <!-- ์Šฌ๋ผ์ด๋” -->
54
  <input type="range" min="0" max="100" value="50"
55
+ oninput="document.getElementById('overlay').style.width = this.value + '%';"
56
  style="
57
  position: absolute;
58
+ bottom: 10px;
59
+ left: 50%;
60
+ transform: translateX(-50%);
61
+ width: 80%;
62
+ -webkit-appearance: none;
 
 
 
63
  background: transparent;
64
  ">
65
+
66
+ <!-- ์Šฌ๋ผ์ด๋” ๋ ˆ์ด๋ธ” -->
67
  <div style="text-align: center; margin-top: 10px;">
68
  <span>๋ณ€ํ™˜ ํ›„</span> <span style="float: right;">๋ณ€ํ™˜ ์ „</span>
69
  </div>
70
+
71
+ <!-- ์Šฌ๋ผ์ด๋” ์Šคํƒ€์ผ๋ง -->
72
+ <style>
73
+ input[type=range] {
74
+ -webkit-appearance: none;
75
+ width: 100%;
76
+ height: 5px;
77
+ background: #ddd;
78
+ outline: none;
79
+ opacity: 0.7;
80
+ -webkit-transition: .2s;
81
+ transition: opacity .2s;
82
+ }
83
+
84
+ input[type=range]::-webkit-slider-thumb {
85
+ -webkit-appearance: none;
86
+ appearance: none;
87
+ width: 15px;
88
+ height: 15px;
89
+ background: #4CAF50;
90
+ cursor: pointer;
91
+ border-radius: 50%;
92
+ }
93
+
94
+ input[type=range]::-moz-range-thumb {
95
+ width: 15px;
96
+ height: 15px;
97
+ background: #4CAF50;
98
+ cursor: pointer;
99
+ border-radius: 50%;
100
+ }
101
+ </style>
102
  </div>
103
  """
104
  return html
105
 
106
  def process_image(image, contrast, brightness, blur):
107
  """
108
+ ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ , ๋น„๊ต ์Šฌ๋ผ์ด๋”์™€ ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
109
  """
110
  if image is None:
111
  return "์ด๋ฏธ์ง€๊ฐ€ ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.", None
 
129
 
130
  with gr.Blocks() as demo:
131
  gr.Markdown("## ๐Ÿ“ธ ๋ถ„์œ„๊ธฐ ์žˆ๋Š” ํ‘๋ฐฑ ์‚ฌ์ง„ ๋ณ€ํ™˜๊ธฐ")
132
+ gr.Markdown("์›๋ณธ ์ด๋ฏธ์ง€์™€ ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ ์Šฌ๋ผ์ด๋”๋กœ ๋น„๊ตํ•˜๊ณ , ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
133
 
134
  with gr.Row():
135
  with gr.Column():