Serg4451D commited on
Commit
d15d416
·
verified ·
1 Parent(s): 5aa8ef4

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +75 -0
app.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from PIL import Image
3
+ import cv2
4
+ import os
5
+
6
+ def compress_image(image_path, mode, quality):
7
+ # Открываем изображение
8
+ image = Image.open(image_path)
9
+
10
+ # Уменьшаем размер изображения без потери разрешения
11
+ width, height = image.size
12
+ image = image.resize((width // 2, height // 2), Image.Resampling.LANCZOS)
13
+
14
+ # Применяем сжатие в зависимости от режима
15
+ if mode == 'Фото':
16
+ image = image.convert('RGB')
17
+ image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
18
+ cv2.imwrite('temp.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), quality])
19
+ elif mode == 'Текстура':
20
+ image = image.convert('RGBA')
21
+ image = cv2.cvtColor(image, cv2.COLOR_RGBA2BGRA)
22
+ cv2.imwrite('temp.png', image, [int(cv2.IMWRITE_PNG_COMPRESSION), quality])
23
+
24
+ # Возвращаем увеличенное изображение
25
+ compressed_image = Image.open('temp.jpg' if mode == 'Фото' else 'temp.png')
26
+ compressed_image = compressed_image.resize((width, height), Image.Resampling.LANCZOS)
27
+
28
+ # Удаляем временный файл
29
+ os.remove('temp.jpg' if mode == 'Фото' else 'temp.png')
30
+
31
+ return compressed_image
32
+
33
+ def process_image(input_image, mode, compression_level):
34
+ # Сохраняем загруженное изображение
35
+ input_image.save('input.jpg')
36
+
37
+ # Сжимаем изображение
38
+ compressed_image = compress_image('input.jpg', mode, compression_level)
39
+
40
+ # Удаляем временный файл
41
+ os.remove('input.jpg')
42
+
43
+ return compressed_image
44
+
45
+ # Создаем интерфейс Gradio
46
+ with gr.Blocks() as demo:
47
+ gr.Markdown("## Интеллектуальное сжатие изображений")
48
+
49
+ with gr.Row():
50
+ input_image = gr.Image(label="Загрузите изображение")
51
+ output_image = gr.Image(label="Сжатое изображение")
52
+
53
+ with gr.Row():
54
+ mode = gr.Dropdown(
55
+ choices=['Фото', 'Текстура'],
56
+ value='Фото',
57
+ label="Режим сжатия"
58
+ )
59
+ compression_level = gr.Slider(
60
+ minimum=1,
61
+ maximum=100,
62
+ value=85,
63
+ label="Уровень сжатия"
64
+ )
65
+
66
+ compress_button = gr.Button("Сжать изображение")
67
+ compress_button.click(
68
+ process_image,
69
+ inputs=[input_image, mode, compression_level],
70
+ outputs=output_image
71
+ )
72
+
73
+ # Запускаем приложение
74
+ if __name__ == "__main__":
75
+ demo.launch()