diff --git a/.DS_Store b/.DS_Store index 8b4a3f0..30a8533 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/image_project/init_image/src/blend_images.py b/image_project/init_image/src/blend_images.py index d222d26..0f905ff 100644 --- a/image_project/init_image/src/blend_images.py +++ b/image_project/init_image/src/blend_images.py @@ -6,14 +6,14 @@ 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]): + if (np.asarray(img1).shape[-1] or np.asarray(img2).shape[-1] == 4): # 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 + + the_new_img2 = new_img2 # Ajuster la position de l'image 2 en fonction de la position relative x, y = position diff --git a/image_project/init_image/src/create_gif.py b/image_project/init_image/src/create_gif.py index 93da90f..643392a 100644 --- a/image_project/init_image/src/create_gif.py +++ b/image_project/init_image/src/create_gif.py @@ -9,15 +9,12 @@ def creer_gif(tableau_images, duree): 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) - + if (tableau_images[0].size != img.size): + img_red = img_red.resize(tableau_images[0].size) + gif.append(img_red) - # Enregistrer le GIF // duree en ms + # Enregistrer le GIF imageio.mimsave('media/new_gif.gif', gif, duration=duree, loop=0) diff --git a/image_project/init_image/src/fusionner_verticalement.py b/image_project/init_image/src/fusionner_verticalement.py index 82c58cb..610da00 100644 --- a/image_project/init_image/src/fusionner_verticalement.py +++ b/image_project/init_image/src/fusionner_verticalement.py @@ -6,12 +6,11 @@ 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) + image2_redimensionnee = image2_redimensionnee.resize(image1.size) 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 + diff --git a/image_project/init_image/templates/init_image/align_horizontal.html b/image_project/init_image/templates/init_image/align_horizontal.html index 51fb721..c0ac009 100644 --- a/image_project/init_image/templates/init_image/align_horizontal.html +++ b/image_project/init_image/templates/init_image/align_horizontal.html @@ -30,6 +30,12 @@

Your are in page alignement horizontal

+ + {% if message_erreur %} +
+ {{ message_erreur }} +
+ {% endif %}
diff --git a/image_project/init_image/templates/init_image/align_vertical.html b/image_project/init_image/templates/init_image/align_vertical.html index e4e39d7..11dc3bf 100644 --- a/image_project/init_image/templates/init_image/align_vertical.html +++ b/image_project/init_image/templates/init_image/align_vertical.html @@ -31,6 +31,12 @@ Your are in page alignement vertical + {% if message_erreur %} +
+ {{ message_erreur }} +
+ {% endif %} +
{% csrf_token %} diff --git a/image_project/init_image/templates/init_image/animation.html b/image_project/init_image/templates/init_image/animation.html index 0fb582f..41eab8b 100644 --- a/image_project/init_image/templates/init_image/animation.html +++ b/image_project/init_image/templates/init_image/animation.html @@ -31,16 +31,18 @@ Your are in page animation + {% if message_erreur %} +
+ {{ message_erreur }} +
+ {% endif %} +
{% csrf_token %} -
- - -
- - + +
@@ -50,13 +52,22 @@
+
+ {% if image_classique %} + {% for i in tab_number %} +
+ +
+ {% endfor %} + {% endif %} +
+ {% if image_classique %} -
- - +
{% endif %} +
- + - - \ No newline at end of file diff --git a/image_project/init_image/templates/init_image/resize.html b/image_project/init_image/templates/init_image/resize.html index 2f3b49b..27591cb 100644 --- a/image_project/init_image/templates/init_image/resize.html +++ b/image_project/init_image/templates/init_image/resize.html @@ -31,6 +31,12 @@ Your are in page resize + {% if message_erreur %} +
+ {{ message_erreur }} +
+ {% endif %} +
{% csrf_token %} diff --git a/image_project/init_image/templates/init_image/traitement.html b/image_project/init_image/templates/init_image/traitement.html deleted file mode 100644 index 219c235..0000000 --- a/image_project/init_image/templates/init_image/traitement.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - Document - - - - - - -

traitement

-
- - - - - -
diff --git a/image_project/init_image/views.py b/image_project/init_image/views.py index e354131..cf051a4 100644 --- a/image_project/init_image/views.py +++ b/image_project/init_image/views.py @@ -12,21 +12,47 @@ from .src.fusionner_horizontalement import fusionner_horizontalement from .src.create_gif import creer_gif # Create your views here. -def upload_image(request): +def upload_image(request): + return render(request, 'init_image/index.html') + +def black_white(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + if request.method == 'POST' and request.FILES: image = request.FILES['image'] - # ouvrir image + nom_image = str(image) + nom_fichier, extension = nom_image.split(".") + + if extension not in tableau_extension: + return render(request, 'init_image/black_white.html', context={"image_classique" : False, + 'message_erreur' : 'mauvaise extension (jpeg/jpg, png ou svg)'}) + + # 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') + + # 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 page_gray(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + if request.method == 'POST' and request.FILES: image = request.FILES['image'] + nom_image = str(image) + nom_fichier, extension = nom_image.split(".") + + if extension not in tableau_extension: + return render(request, 'init_image/gray.html', context={"image_classique" : False, + 'message_erreur' : 'mauvaise extension (jpeg/jpg, png ou svg)'}) + # ouvrir image image_t = open_image(image) image_t.save("media/image_classique.png") @@ -39,27 +65,25 @@ def page_gray(request): return render(request, 'init_image/gray.html', context={"image_classique" : False}) -def black_white(request): +def resize_picture(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + 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}) + nom_image = str(image) + nom_fichier, extension = nom_image.split(".") - return render(request, 'init_image/black_white.html', context={"image_classique" : False}) + if extension not in tableau_extension: + return render(request, 'init_image/resize.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : mauvaise extension (jpeg/jpg, png ou svg)'}) -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']) + try : + hauteur = int(request.POST['hauteur']) + largeur = int(request.POST['largeur']) + except: + return render(request, 'init_image/resize.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : seulement des intiers pour la hauteur et la largeur'}) if(hauteur < 1 ): hauteur = 100 @@ -79,10 +103,21 @@ def resize_picture(request): return render(request, 'init_image/resize.html', context={"image_classique" : False}) def alignement_vertical(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + if request.method == 'POST' and request.FILES: image = request.FILES['image'] image2 = request.FILES['image2'] + nom_image = str(image) + nom_image2 = str(image2) + nom_fichier, extension = nom_image.split(".") + nom_fichier, extension2 = nom_image2.split(".") + + if extension not in tableau_extension or extension2 not in tableau_extension: + return render(request, 'init_image/align_vertical.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : mauvaise extension (jpeg/jpg, png ou svg)'}) + # ouvrir image image_t1 = open_image(image) image_t1.save("media/image_classique_1.png") @@ -99,10 +134,21 @@ def alignement_vertical(request): return render(request, 'init_image/align_vertical.html', context={"image_classique" : False}) def alignement_horizontal(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + if request.method == 'POST' and request.FILES: image = request.FILES['image'] image2 = request.FILES['image2'] + nom_image = str(image) + nom_image2 = str(image2) + nom_fichier, extension = nom_image.split(".") + nom_fichier, extension2 = nom_image2.split(".") + + if extension not in tableau_extension or extension2 not in tableau_extension: + return render(request, 'init_image/align_horizontal.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : mauvaise extension (jpeg/jpg, png ou svg)'}) + # ouvrir image image_t1 = open_image(image) image_t1.save("media/image_classique_1.png") @@ -119,10 +165,32 @@ def alignement_horizontal(request): return render(request, 'init_image/align_horizontal.html', context={"image_classique" : False}) def fusion(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + if request.method == 'POST' and request.FILES: image = request.FILES['image'] image2 = request.FILES['image2'] + nom_image = str(image) + nom_image2 = str(image2) + nom_fichier, extension = nom_image.split(".") + nom_fichier, extension2 = nom_image2.split(".") + + if extension not in tableau_extension or extension2 not in tableau_extension: + return render(request, 'init_image/fusion.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : mauvaise extension (jpeg/jpg, png ou svg)'}) + + opacite = request.POST['opacite'] + opacite = opacite.replace(',', '.') + opacite = float(opacite) + + try : + position_x = int(request.POST['position_x']) + position_y = int(request.POST['position_y']) + except: + return render(request, 'init_image/fusion.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : seulement des intiers pour l\'opacité et la position (x,y)'}) + # ouvrir image image_t1 = open_image(image) image_t1.save("media/image_classique_1.png") @@ -131,7 +199,7 @@ def fusion(request): 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 = blend_images(image_t1, image_t2, opacite, (position_x,position_y)) image_noir_blanc.save("media/image_fusion.png") return render(request, 'init_image/fusion.html', context={"image_classique" : True}) @@ -139,22 +207,41 @@ def fusion(request): return render(request, 'init_image/fusion.html', context={"image_classique" : False}) def animation(request): + tableau_extension = ['jpeg', 'jpg', 'svg', 'png'] + if request.method == 'POST' and request.FILES: - image = request.FILES['image'] - image2 = request.FILES['image2'] + + tableau_images = [] + i = 0 + duree = int(request.POST['duree']) + images = request.FILES.getlist('images[]') - # ouvrir image - image_t1 = open_image(image) - image_t1.save("media/image_classique_1.png") + for image in images : + tableau_images.append(image) - image_t2 = open_image(image2) - image_t2.save("media/image_classique_2.png") + for image in tableau_images: + nom_image = str(image) + nom_fichier, extension = nom_image.split(".") + if extension not in tableau_extension: + return render(request, 'init_image/animation.html', context={"image_classique" : False, + 'message_erreur' : 'Erreur : mauvaise extension (jpeg/jpg, png ou svg)'}) + + + # save all picture + for image in tableau_images: + image_t1 = open_image(image) + image_t1.save("media/image_classique_" + str(i) + ".png") + tableau_images[i] = image_t1 + i += 1 + + tab_number = [number for number in range(0, i)] # 1. Transformation en noir et blanc - image_noir_blanc = creer_gif([image_t1, image_t2], duree) + image_noir_blanc = creer_gif(tableau_images, duree) - return render(request, 'init_image/animation.html', context={"image_classique" : True}) + return render(request, 'init_image/animation.html', context={"image_classique" : True, + 'tab_number' : tab_number}) return render(request, 'init_image/animation.html', context={"image_classique" : False}) diff --git a/image_project/media/image_classique_0.png b/image_project/media/image_classique_0.png new file mode 100644 index 0000000..49161da Binary files /dev/null and b/image_project/media/image_classique_0.png differ diff --git a/image_project/media/image_classique_1.png b/image_project/media/image_classique_1.png index 188585f..899ee2c 100644 Binary files a/image_project/media/image_classique_1.png and b/image_project/media/image_classique_1.png differ diff --git a/image_project/media/image_classique_2.png b/image_project/media/image_classique_2.png index 12a370a..49161da 100644 Binary files a/image_project/media/image_classique_2.png and b/image_project/media/image_classique_2.png differ diff --git a/image_project/media/image_classique_3.png b/image_project/media/image_classique_3.png new file mode 100644 index 0000000..188585f Binary files /dev/null and b/image_project/media/image_classique_3.png differ diff --git a/image_project/media/image_classique_4.png b/image_project/media/image_classique_4.png new file mode 100644 index 0000000..12a370a Binary files /dev/null and b/image_project/media/image_classique_4.png differ diff --git a/image_project/media/image_fusion-vertical.png b/image_project/media/image_fusion-vertical.png index a1e3394..329c625 100644 Binary files a/image_project/media/image_fusion-vertical.png and b/image_project/media/image_fusion-vertical.png differ diff --git a/image_project/media/image_fusion.png b/image_project/media/image_fusion.png index 0ce42df..9924566 100644 Binary files a/image_project/media/image_fusion.png and b/image_project/media/image_fusion.png differ diff --git a/image_project/media/image_noir-blanc.png b/image_project/media/image_noir-blanc.png index b1c6723..5de9f9c 100644 Binary files a/image_project/media/image_noir-blanc.png and b/image_project/media/image_noir-blanc.png differ diff --git a/image_project/media/image_resize.png b/image_project/media/image_resize.png index 48728d7..8722f11 100644 Binary files a/image_project/media/image_resize.png and b/image_project/media/image_resize.png differ diff --git a/image_project/media/new_gif.gif b/image_project/media/new_gif.gif index ebac734..ee2ae2a 100644 Binary files a/image_project/media/new_gif.gif and b/image_project/media/new_gif.gif differ diff --git a/image_project/media/style.css b/image_project/media/style.css index 80dac08..cec30cf 100644 --- a/image_project/media/style.css +++ b/image_project/media/style.css @@ -1,3 +1,6 @@ -.formulaire{ - +.container__image{ + max-width: 400px; + max-height: 250px; + width: 400px; + height: 250px; } \ No newline at end of file