change with a new project (80% are ddone)

main
Destroyeur6315 1 year ago
parent 948527c9a9
commit 51924b798f

BIN
.DS_Store vendored

Binary file not shown.

@ -1,5 +1,5 @@
"""
ASGI config for isv_project project.
ASGI config for image_project project.
It exposes the ASGI callable as a module-level variable named ``application``.
@ -11,6 +11,6 @@ import os
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "isv_project.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "image_project.settings")
application = get_asgi_application()

@ -1,5 +1,5 @@
"""
Django settings for isv_project project.
Django settings for image_project project.
Generated by 'django-admin startproject' using Django 5.0.1.
@ -21,7 +21,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "django-insecure-^itl7gk82f%j@beh(*s(ggncc6of200s&reksb8@02$g-bvxts"
SECRET_KEY = "django-insecure-*!^xcc^cs2vsw!dsr14$veqch@s*a2#r9!g#6e#z0ma+ye^c7="
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
@ -32,6 +32,7 @@ ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
"init_image.apps.InitImageConfig",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
@ -50,12 +51,12 @@ MIDDLEWARE = [
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "isv_project.urls"
ROOT_URLCONF = "image_project.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [os.path.join(BASE_DIR, './app/templates')],
"DIRS": [os.path.join(BASE_DIR, './init_image/templates')],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
@ -68,7 +69,7 @@ TEMPLATES = [
},
]
WSGI_APPLICATION = "isv_project.wsgi.application"
WSGI_APPLICATION = "image_project.wsgi.application"
# Database
@ -122,3 +123,7 @@ STATIC_URL = "static/"
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# fotoblog/settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

@ -1,5 +1,5 @@
"""
URL configuration for isv_project project.
URL configuration for image_project project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.0/topics/http/urls/
@ -16,8 +16,14 @@ Including another URLconf
"""
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path("app/", include("app.urls")),
path("admin/", admin.site.urls),
path("image/", include("init_image.urls")),
path("admin/", admin.site.urls),
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

@ -1,5 +1,5 @@
"""
WSGI config for isv_project project.
WSGI config for image_project project.
It exposes the WSGI callable as a module-level variable named ``application``.
@ -11,6 +11,6 @@ import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "isv_project.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "image_project.settings")
application = get_wsgi_application()

@ -1,6 +1,6 @@
from django.apps import AppConfig
class AppConfig(AppConfig):
class InitImageConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "app"
name = "init_image"

@ -0,0 +1,37 @@
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
def blend_images(img1, img2, blend_ratio, position):
new_img1 = img1
new_img2 = img2
if (np.asarray(img1).shape[-1] != np.asarray(img2).shape[-1]):
# On regarde si l'image 1 a le canal alpha, si oui on l'enlève
if (np.asarray(img1).shape[-1] == 4):
new_img1 = new_img1.convert("RGB")
else:
new_img2 = new_img2.convert("RGB")
the_new_img2 = img2
# Ajuster la position de l'image 2 en fonction de la position relative
x, y = position
x *= -1
y *= -1
the_new_img2 = the_new_img2.crop((x, y, x + new_img1.width, y + new_img1.height))
array1 = np.array(new_img1)
array2 = np.array(the_new_img2)
blended_array = np.round(array1 * blend_ratio + array2 * (1 - blend_ratio)).astype(np.uint8)
if blended_array.ndim == 2:
blended_array = np.expand_dims(blended_array, axis=2)
blended_img = Image.fromarray(blended_array, 'RGB')
return blended_img

@ -0,0 +1,3 @@
def convert_to_black_and_white(image):
grayscale_image = image.convert('1')
return grayscale_image

@ -1,4 +1,3 @@
def convert_to_grayscale(image):
grayscale_image = image.convert("L")
return grayscale_image

@ -0,0 +1,23 @@
import imageio
import numpy as np
from PIL import Image
from .resize_image import redimensionner_image
def creer_gif(tableau_images, duree):
gif = []
for img in tableau_images:
img_red = img
img_red = img_red.convert("RGB")
if (tableau_images[0].size[1] != img.size[1]):
nouvelle_largeur = int(img.size[0] * (tableau_images[0].size[1] / img.size[1]))
nouvelle_hauteur = tableau_images[0].size[1]
img_red = redimensionner_image(np.asarray(img), nouvelle_largeur, nouvelle_hauteur)
gif.append(img_red)
# Enregistrer le GIF // duree en ms
imageio.mimsave('media/new_gif.gif', gif, duration=duree, loop=0)

@ -0,0 +1,7 @@
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw
def show_image(image):
image = Image.open(image)
plt.imshow(image)
# plt.show()

@ -0,0 +1,17 @@
from .resize_image import redimensionner_image
from PIL import Image
import numpy as np
def fusionner_horizontalement(image1, image2):
image2_redimensionnee = image2
if (image1.size[1] != image2.size[1]):
nouvelle_largeur = int(image2.size[0] * (image1.size[1] / image2.size[1]))
nouvelle_hauteur = image1.size[1]
image2_redimensionnee = redimensionner_image(np.asarray(image2), nouvelle_largeur, nouvelle_hauteur)
result = Image.new('RGB', (image1.width + image2_redimensionnee.width, image1.height))
result.paste(image1, (0, 0))
result.paste(image2_redimensionnee, (image1.width, 0))
return result

@ -0,0 +1,17 @@
from .resize_image import redimensionner_image
from PIL import Image
import numpy as np
def fusionner_verticalement(image1, image2):
image2_redimensionnee = image2
if (image1.size[0] != image2.size[0]):
nouvelle_largeur = image1.size[0]
nouvelle_hauteur = int(image2.size[1] * (image1.size[0] / image2.size[0]))
image2_redimensionnee = redimensionner_image(np.asarray(image2), nouvelle_largeur, nouvelle_hauteur)
result = Image.new('RGB', (image1.width, image1.height + image2_redimensionnee.height))
result.paste(image1, (0, 0))
result.paste(image2_redimensionnee, (0, image1.height))
return result

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./../black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./../gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./../resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./../align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./../fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./../animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page alignement horizontal
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<div class="form-group">
<label class="mb-2" for="image2">Choississez une image</label>
<input type="file" id="image2" name="image2" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique_1.png">
<img class="w-100 mb-5" src="../../media/image_classique_2.png">
<img class="w-100" src="../../media/image_fusion-horizontal.png">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./../black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./../gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./../resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./../align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./../fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./../animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page alignement vertical
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<div class="form-group">
<label class="mb-2" for="image2">Choississez une image</label>
<input type="file" id="image2" name="image2" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique_1.png">
<img class="w-100 mb-5" src="../../media/image_classique_2.png">
<img class="w-100" src="../../media/image_fusion-vertical.png">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="../../media/style.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./../black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./../gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./../resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./../align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./../align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./../fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page animation
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<div class="form-group mb-3">
<label class="mb-2" for="image2">Choississez une image</label>
<input type="file" id="image2" name="image2" accept="image/*">
</div>
<div class="form-group">
<label class="mb-2" for="duree">Durée en ms: </label>
<input type="text" id="duree" name="duree" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique_1.png">
<img class="w-100 mb-5" src="../../media/image_classique_2.png">
<img class="w-100 mb-5" src="../../media/new_gif.gif">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./../gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./../resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./../align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./../align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./../fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./../animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page black and white
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique.png">
<img class="w-100" src="../../media/image_noir-blanc.png">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./../black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./../gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./../resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./../align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./../align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./../animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page fusion
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<div class="form-group">
<label class="mb-2" for="image2">Choississez une image</label>
<input type="file" id="image2" name="image2" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique_1.png">
<img class="w-100 mb-5" src="../../media/image_classique_2.png">
<img class="w-100" src="../../media/image_fusion.png">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,58 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./../black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./../resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./../align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./../align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./../fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./../animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page gray
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique.png">
<img class="w-100" src="../../media/image_gray.png">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./resize" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
</body>
</html>
<!-- <form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<label for="image">Choisir une image :</label>
<input type="file" id="image" name="image" accept="image/*">
<input type="submit" value="telecharger">
</form> -->

@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
</head>
<body>
<div class="container">
<header class="d-flex justify-content-center py-3">
<ul class="nav nav-pills">
<li class="nav-item"><a href="./../" class="nav-link" aria-current="page">Home</a></li>
<li class="nav-item"><a href="./../black&white" class="nav-link" aria-current="page">B&W</a></li>
<li class="nav-item"><a href="./../gray" class="nav-link">Gray</a></li>
<li class="nav-item"><a href="./" class="nav-link">Resize</a></li>
<li class="nav-item"><a href="./../align_v" class="nav-link">Align_V</a></li>
<li class="nav-item"><a href="./../align_h" class="nav-link">Align_H</a></li>
<li class="nav-item"><a href="./../fusion" class="nav-link">Fusion</a></li>
<li class="nav-item"><a href="./../animation" class="nav-link">Animation</a></li>
</ul>
</header>
</div>
<div class="container text-center">
<h1 class="mb-5">
Your are in page resize
</h1>
<div class="d-flex justify-content-center mb-5">
<form class="border boder-1 border-black p-3 w-50" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group mb-3">
<label class="mb-2" for="image">Choississez une image</label>
<input type="file" id="image" name="image" accept="image/*">
</div>
<div class="form-group">
<label class="mb-2" for="hauteur">Choississez une nouvelle hauteur</label>
<input type="text" id="hauteur" name="hauteur" accept="image/*">
</div>
<div class="form-group">
<label class="mb-2" for="largeur">Choississez une nouvelle largeur</label>
<input type="text" id="largeur" name="largeur" accept="image/*">
</div>
<input type="submit" class="btn btn-primary mt-3" value="Telecharger">
</form>
</div>
{% if image_classique %}
<div class="w-full">
<img class="w-100 mb-5" src="../../media/image_classique.png">
<img class="w-full" src="../../media/image_resize.png">
</div>
{% endif %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</body>
</html>

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<title>Document</title>
</head>
<body>
</body>
</html>
<h1>traitement</h1>
<div class="container">
<img src="../media/image_classique.png">
<img src="../media/image_gray.png">
<img src="../media/image_noir-blanc.png">
<img src="../media/image_redimension.png">
<img src="../media/image_fusion_vertical.png">
</div>

@ -0,0 +1,14 @@
from django.urls import path
from . import views
import init_image.views
urlpatterns = [
path("", views.upload_image, name="upload_image"),
path("gray/", views.page_gray, name="page_gray"),
path("black&white/", views.black_white, name="black_white"),
path("resize/", views.resize_picture, name="resize_picture"),
path("align_v/", views.alignement_vertical, name="alignement_vertical"),
path("align_h/", views.alignement_horizontal, name="alignement_horizontal"),
path("fusion/", views.fusion, name="fusion"),
path("animation/", views.animation, name="animation"),
]

@ -0,0 +1,160 @@
import numpy as np
from django.shortcuts import render
from .src.blend_images import blend_images
from .src.image_opener import open_image
from .src.convert_to_grayscale import convert_to_grayscale
from .src.convert_to_black_and_white import convert_to_black_and_white
from .src.resize_image import redimensionner_image
from .src.fusionner_verticalement import fusionner_verticalement
from .src.fusionner_horizontalement import fusionner_horizontalement
from .src.create_gif import creer_gif
# Create your views here.
def upload_image(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
# ouvrir image
image_t = open_image(image)
image_t.save("media/image_classique.png")
return render(request, 'init_image/traitement.html')
return render(request, 'init_image/index.html')
def page_gray(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
# ouvrir image
image_t = open_image(image)
image_t.save("media/image_classique.png")
# 1. Transformation en noir et blanc
image_noir_blanc = convert_to_grayscale(image_t)
image_noir_blanc.save("media/image_gray.png")
return render(request, 'init_image/gray.html', context={"image_classique" : True})
return render(request, 'init_image/gray.html', context={"image_classique" : False})
def black_white(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
# ouvrir image
image_t = open_image(image)
image_t.save("media/image_classique.png")
# 1. Transformation en noir et blanc
image_noir_blanc = convert_to_black_and_white(image_t)
image_noir_blanc.save("media/image_noir-blanc.png")
return render(request, 'init_image/black_white.html', context={"image_classique" : True})
return render(request, 'init_image/black_white.html', context={"image_classique" : False})
def resize_picture(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
hauteur = int(request.POST['hauteur'])
largeur = int(request.POST['largeur'])
if(hauteur < 1 ):
hauteur = 100
if(largeur <1):
largeur = 100
# ouvrir image
image_t = open_image(image)
image_t.save("media/image_classique.png")
# 1. Transformation en noir et blanc
image_noir_blanc = redimensionner_image(np.asarray(image_t), hauteur, largeur)
image_noir_blanc.save("media/image_resize.png")
return render(request, 'init_image/resize.html', context={"image_classique" : True})
return render(request, 'init_image/resize.html', context={"image_classique" : False})
def alignement_vertical(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
image2 = request.FILES['image2']
# ouvrir image
image_t1 = open_image(image)
image_t1.save("media/image_classique_1.png")
image_t2 = open_image(image2)
image_t2.save("media/image_classique_2.png")
# 1. Transformation en noir et blanc
image_noir_blanc = fusionner_verticalement(image_t1, image_t2)
image_noir_blanc.save("media/image_fusion-vertical.png")
return render(request, 'init_image/align_vertical.html', context={"image_classique" : True})
return render(request, 'init_image/align_vertical.html', context={"image_classique" : False})
def alignement_horizontal(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
image2 = request.FILES['image2']
# ouvrir image
image_t1 = open_image(image)
image_t1.save("media/image_classique_1.png")
image_t2 = open_image(image2)
image_t2.save("media/image_classique_2.png")
# 1. Transformation en noir et blanc
image_noir_blanc = fusionner_horizontalement(image_t1, image_t2)
image_noir_blanc.save("media/image_fusion-horizontal.png")
return render(request, 'init_image/align_horizontal.html', context={"image_classique" : True})
return render(request, 'init_image/align_horizontal.html', context={"image_classique" : False})
def fusion(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
image2 = request.FILES['image2']
# ouvrir image
image_t1 = open_image(image)
image_t1.save("media/image_classique_1.png")
image_t2 = open_image(image2)
image_t2.save("media/image_classique_2.png")
# 1. Transformation en noir et blanc
image_noir_blanc = blend_images(image_t1, image_t2, 0.1, (1000,1000))
image_noir_blanc.save("media/image_fusion.png")
return render(request, 'init_image/fusion.html', context={"image_classique" : True})
return render(request, 'init_image/fusion.html', context={"image_classique" : False})
def animation(request):
if request.method == 'POST' and request.FILES:
image = request.FILES['image']
image2 = request.FILES['image2']
duree = int(request.POST['duree'])
# ouvrir image
image_t1 = open_image(image)
image_t1.save("media/image_classique_1.png")
image_t2 = open_image(image2)
image_t2.save("media/image_classique_2.png")
# 1. Transformation en noir et blanc
image_noir_blanc = creer_gif([image_t1, image_t2], duree)
return render(request, 'init_image/animation.html', context={"image_classique" : True})
return render(request, 'init_image/animation.html', context={"image_classique" : False})

@ -6,7 +6,7 @@ import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "isv_project.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "image_project.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

@ -0,0 +1,3 @@
.formulaire{
}

@ -1,20 +0,0 @@
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
def blend_images(img1, img2, blend_ratio):
img2 = img2.resize(img1.size)
array1 = np.array(img1)
array2 = np.array(img2)
blended_array = np.round(array1 * blend_ratio + array2 * (1 - blend_ratio)).astype(np.uint8)
if blended_array.ndim == 2:
blended_array = np.expand_dims(blended_array, axis=2)
blended_img = Image.fromarray(blended_array, 'RGB')
return blended_img

@ -1,7 +0,0 @@
def convert_to_black_and_white(image):
for x in range(image.width):
for y in range(image.height):
pixel_color = image.getpixel((x, y))
if pixel_color != (255, 255, 255):
image.putpixel((x, y), (0, 0, 0))

@ -1,11 +0,0 @@
import imageio
from PIL import Image
def creer_gif(tableau_images, output_path, duree=0.5):
gif = []
for img in tableau_images:
gif.append(Image.fromarray(img))
# Enregistrer le GIF
imageio.mimsave(output_path, gif, duration=duree)

@ -1,6 +0,0 @@
import matplotlib.pyplot as plt
def show_image(image):
plt.imshow(image)
plt.show()

@ -1,13 +0,0 @@
from resize_image import redimensionner_image
from PIL import Image
def fusionner_horizontalement(image1, image2):
nouvelle_largeur = int(image2.size[0] * (image1.size[1] / image2.size[1]))
nouvelle_hauteur = image1.size[1]
image2_redimensionnee = redimensionner_image(image2, nouvelle_largeur, nouvelle_hauteur)
result = Image.new('RGB', (image1.width + image2_redimensionnee.width, image1.height))
result.paste(image1, (0, 0))
result.paste(image2_redimensionnee, (image1.width, 0))
return result

@ -1,14 +0,0 @@
from resize_image import redimensionner_image
from PIL import Image
def fusionner_verticalement(image1, image2):
nouvelle_largeur = image1.size[0]
nouvelle_hauteur = int(image2.size[1] * (image1.size[0] / image2.size[0]))
image2_redimensionnee = redimensionner_image(image2, nouvelle_largeur, nouvelle_hauteur)
result = Image.new('RGB', (image1.width, image1.height + image2_redimensionnee.height))
result.paste(image1, (0, 0))
result.paste(image2_redimensionnee, (0, image1.height))
return result

Binary file not shown.

@ -1,9 +0,0 @@
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/app/34/">34</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}

@ -1,13 +0,0 @@
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
# ex: /polls/5/
path("<int:question_id>/", views.detail, name="detail"),
# ex: /polls/5/results/
path("<int:question_id>/results/", views.results, name="results"),
# ex: /polls/5/vote/
path("<int:question_id>/vote/", views.vote, name="vote"),
]

@ -1,20 +0,0 @@
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
# Create your views here.
def index(request):
context = {"latest_question_list": 'qui est elon musk'}
return render(request, "app/index.html", context)
#return HttpResponse("Hello, world. You're at the app index.")
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)
def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)
def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)
Loading…
Cancel
Save