File size: 2,996 Bytes
06f070a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from PIL import Image, ImageOps, ImageEnhance
import gradio as gr
import numpy as np

# Funci贸n para transformar negativo a positivo ajustando el balance de color
def negativo_a_positivo_fotografico(image):
    # Convertir la imagen a modo RGB si no lo est谩
    if image.mode != "RGB":
        image = image.convert("RGB")
    
    # Invertir los colores de la imagen (convertir negativo a positivo)
    image_invertida = ImageOps.invert(image)
    
    # Mejorar la saturaci贸n y el brillo para corregir la apariencia t铆pica de los negativos
    image_corregida = ImageEnhance.Color(image_invertida).enhance(1.5)  # Ajustar la saturaci贸n
    image_corregida = ImageEnhance.Brightness(image_corregida).enhance(1.2)  # Ajustar el brillo
    
    return image_corregida

# Funci贸n original para im谩genes digitales negativas
def negativo_a_positivo(image):
    # Convertir la imagen a modo RGB si no lo est谩
    if image.mode != "RGB":
        image = image.convert("RGB")
    
    # Invertir los colores de la imagen (transformar negativo a positivo)
    image_positivo = ImageOps.invert(image)
    
    return image_positivo

# Interfaz para Gradio con selecci贸n de tipo de imagen y ajustes de brillo y saturaci贸n
def interfaz(image, tipo_negativo, brillo, saturacion, contraste, nitidez):
    # Convertir la imagen a un formato adecuado para Pillow
    pil_image = Image.fromarray(image)
    
    # Elegir el tipo de conversi贸n seg煤n la selecci贸n del usuario
    if tipo_negativo == "Negativo Digital":
        image_positivo = negativo_a_positivo(pil_image)
    else:
        image_positivo = negativo_a_positivo_fotografico(pil_image)
    
    # Aplicar ajustes de brillo, saturaci贸n, contraste y nitidez
    image_positivo = ImageEnhance.Brightness(image_positivo).enhance(brillo)
    image_positivo = ImageEnhance.Color(image_positivo).enhance(saturacion)
    image_positivo = ImageEnhance.Contrast(image_positivo).enhance(contraste)
    image_positivo = ImageEnhance.Sharpness(image_positivo).enhance(nitidez)
    
    # Devolver la imagen transformada en formato de array para Gradio
    return np.array(image_positivo)

# Crear el Space de Hugging Face con Gradio
demo = gr.Interface(
    fn=interfaz,
    inputs=[
        gr.Image(type="numpy", label="Sube o captura una imagen en negativo"),
        gr.Radio(choices=["Negativo Digital", "Negativo de Rollo Fotogr谩fico"], label="Tipo de Negativo"),
        gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Brillo"),
        gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Saturaci贸n"),
        gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Contraste"),
        gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Nitidez")
    ],
    outputs="image",
    live=True,
    title="Transforma Negativos en Positivos",
    description="Carga una imagen de negativo (desde archivo o c谩mara) y ajusta el brillo, saturaci贸n, contraste y nitidez para obtener el mejor resultado."
)

# Ejecutar la aplicaci贸n de Gradio
demo.launch()