Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

# IDE
.idea/
.vscode/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db
144 changes: 117 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@


<p align="center">
Aplicación de procesamiento de fotos desarrollada en PyQt5 que permite aplicar <strong>efectos</strong> a imágenes. La aplicación es altamente modular, permitiendo a los usuarios crear y agregar sus propios efectos personalizados.
Aplicación de procesamiento de fotos desarrollada en PyQt5 que permite aplicar <strong>efectos</strong> a imágenes. La aplicación es altamente modular, permitiendo a los usuarios crear y agregar sus propios efectos personalizados mediante una interfaz gráfica o editando directamente el archivo JSON de configuración.
</p>

<hr>
Expand All @@ -27,10 +27,12 @@ $${\color{red}Screenshots}$$
$${\color{yellow}Características}$$


- **Interfaz de usuario muy amigable**
- **Gran variedad de efectos**: programos con opencv y numpy
- **Modularidad**: Los usuarios pueden crear sus propios efectos y agregarlos fácilmente.
- **Libertad**: tienes la libertad de editar los efectos y configurar los parametros a tu gusto
- **Interfaz de usuario muy amigable** con pestañas para edición de fotos y creación de filtros
- **Gran variedad de efectos**: programados con opencv y numpy
- **Modularidad**: Los usuarios pueden crear sus propios filtros desde la interfaz gráfica
- **Configuración JSON**: Todos los filtros se almacenan en `filters.json` para fácil edición
- **Persistencia**: Los filtros creados se guardan automáticamente y persisten entre sesiones
- **Libertad**: Tienes la libertad de editar los filtros y configurar los parámetros a tu gusto


<hr>
Expand Down Expand Up @@ -69,53 +71,141 @@ $${\color{lightgreen}Instalación}$$
3. Instala las dependencias:
`pip install -r requirements.txt`

4. Ejecuta el script de configuración de efectos:
`python generate_effects_settings.py`

5. Disfruta:
4. Ejecuta la aplicación:
`python main.py`

<br>
<br>

$${\color{lightblue}Arquitectura \space del \space proyecto}$$

$${\color{lightblue}Crea \space tus \space propios \space efectos❗}$$
```
MODT/
├── main.py # Aplicación principal con interfaz PyQt5
├── filter_engine.py # Motor de filtros con todas las operaciones disponibles
├── filter_manager.py # Gestor de configuración de filtros (carga/guarda JSON)
├── filters.json # Configuración de todos los filtros disponibles
├── assets/ # Recursos gráficos (iconos, etc.)
├── tests/ # Pruebas unitarias
│ └── test_filter_manager.py
├── requirements.txt # Dependencias del proyecto
└── README.md # Este archivo
```

1. Crea un archivo Python en la carpeta `effects`. Este archivo debe definir una función que aplique el efecto y si es necesario otra que envie los parametros de los QSliders y QComboBox.
<br>
<br>

$${\color{orange}Crea \space tus \space propios \space filtros❗}$$

### Opción 1: Desde la interfaz gráfica (Recomendado)

1. Abre la aplicación con `python main.py`
2. Ve a la pestaña **"Editor de Filtros"**
3. Rellena los campos:
- **Nombre**: El nombre de tu filtro
- **Categoría**: Selecciona una existente o escribe una nueva
- **Operación**: Selecciona la operación base (blur, pixelate, etc.)
- **Descripción**: Una breve descripción del filtro
4. Añade parámetros si es necesario con el botón **"+ Añadir parámetro"**
5. Haz clic en **"Guardar filtro"**
6. ¡Tu filtro aparecerá inmediatamente en la pestaña "Editor de Fotos"!

### Opción 2: Editando el archivo JSON

Puedes editar directamente el archivo `filters.json`. Cada filtro tiene la siguiente estructura:

```json
{
"NombreCategoria": {
"nombre_filtro": {
"operation": "nombre_operacion",
"description": "Descripción del filtro",
"parameters": {
"parametro_slider": {
"min": 0,
"max": 100,
"init": 50,
"interval": 1
},
"parametro_opciones": {
"options": ["opcion1", "opcion2", "opcion3"],
"init": "opcion1"
}
}
}
}
}
```

2. La función debe tener la siguiente estructura:
<br>

```python
def apply_effect(image, param1, param2...):
# Implementa tu efecto aquí
return modified_image
### Operaciones disponibles

| Operación | Descripción |
|-----------|-------------|
| `grayscale` | Convierte a escala de grises |
| `hue_shift` | Cambia el matiz de los colores |
| `saturate_color` | Aumenta la saturación de un color específico |
| `indie_effect` | Efecto retro con bordes y ruido |
| `gaussian_blur` | Desenfoque gaussiano suave |
| `box_blur` | Desenfoque de caja |
| `bilateral_filter` | Filtro bilateral que preserva bordes |
| `median_blur` | Desenfoque de mediana |
| `horizontal_blur` | Desenfoque de movimiento horizontal |
| `vertical_blur` | Desenfoque de movimiento vertical |
| `glitch` | Efecto glitch con líneas desplazadas |
| `channel_shift` | Desplazamiento de canal de color |
| `channel_shift_pro` | Desplazamiento avanzado por canal RGB |
| `pixelate` | Pixelado básico |
| `pixelate_pro` | Pixelado avanzado con métodos múltiples |
| `gaussian_noise` | Añade ruido gaussiano |
| `dilate` | Dilatación morfológica |
| `dilate_pro` | Dilatación avanzada |
| `erode` | Erosión morfológica |
| `super_effect` | Combinación de blur, morfología y pirámide |

def get_filter_data():
return {
"parameters": {
"parametro1": {"min": valor_minimo, "max": valor_maximo, "init": valor_inicial, "interval": intervalo},
"parametroOpcion": {"options": ["opcion1", "opcion2"], "init": "valor_inicial"},
}
}
<br>

### Tipos de parámetros

**Slider (deslizador):**
```json
"nombre_param": {
"min": 0, // Valor mínimo
"max": 100, // Valor máximo
"init": 50, // Valor inicial
"interval": 1 // Incremento del slider
}
```

3. Ejecuta el script `generate_effects_settings.py` para actualizar el archivo de configuración `effects_settings.py`.
**Options (opciones):**
```json
"nombre_param": {
"options": ["opcion1", "opcion2", "opcion3"], // Lista de opciones
"init": "opcion1" // Opción seleccionada por defecto
}
```

<hr>
<br>
<br>

$${\color{cyan}Ejecutar \space pruebas}$$

```bash
python -m unittest tests.test_filter_manager -v
```

<hr>
<br>
<br>

$${\color{pink}Contribuye🎉}$$

<div align="center" ><p>Las contribuciones son super bienvenidas, si creas algun efecto y quieres compartirlo con el mundo no dudes en mandarmelo!</p></div>
<div align="center" ><p>Las contribuciones son super bienvenidas, si creas algún efecto y quieres compartirlo con el mundo no dudes en mandármelo!</p></div>

<br>

<div align="center">
<img src="https://web.archive.org/web/20091027075943/http://geocities.com/Heartland/7813/starbar.gif">
</div>


Loading