from math import *
from codebase import *
import numpy as np
import matplotlib.pyplot as plt
from copy import deepcopy

##essai ### Q1 
image1=imread("Photo1.png")
imshow(image1)
plt.show()


###Q2

def SymetrieVerticale(im):
    h,w,r=im.shape
    tableau=np.zeros((h,w,r))
    for j in range(w):
        for i in range(h):
            tableau[i][j][:]=im[i][w-1-j][:]
    return tableau

    
newim=imshow(SymetrieVerticale(image1))
plt.show()




###Q3

def SymetrieHorizontale(im):
    h,w,r=im.shape
    tableau=np.zeros((h,w,r))
    for j in range(w):
        for i in range(h):
            tableau[i][j][:]=im[h-1-i][j][:]
    return tableau

    
newim=imshow(SymetrieHorizontale(image1))
plt.show()

###Q4

def RotationQuartDeTour(im):
    h,w,r=im.shape
    tableau=np.zeros((w,h,r))
    
    for j in range(h):
        for i in range(w):
            tableau[i][j][:]=im[j][w-1-i][:]
    return tableau

newim=imshow(RotationQuartDeTour(image1))
plt.show()



###Q5 negatif
    
def Negatif(im):
    h,w,r=im.shape
    tableau=np.zeros((h,w,r))
    for j in range(w):
        for i in range(h):
            for s in range(r):
                tableau[i][j][s]=1-im[i][j][s]
    return tableau

newim=imshow(Negatif(image1))
plt.show()

###Q6 Reduction/Agrandissement

def ReductionAgrandissement(im,f):
    h,w,r=im.shape
    nh=int(h*f)
    nw=int(w*f)
    tableau=np.zeros((nh,nw,r))
    for j in range(nw):
        for i in range(nh):
            iancien=int(i/f)
            jancien=int(j/f)
            tableau[i][j][:]=im[iancien][jancien][:]
    return tableau

#newim=imshow(ReductionAgrandissement(image1,2))
#plt.show()


###Q7 Cadre Noir
    
def CadreNoir(im,epaisseur):
    tableau=np.array(im)
    h,w,r=tableau.shape
    for j in range(epaisseur):
        for i in range(h):
            for s in range(r):
                tableau[i][j][s]=0
    for j in range(w-epaisseur,w):
        for i in range(h):
           for s in range(r):
               tableau[i][j][s]=0
    for j in range(epaisseur,w-epaisseur):
        for i in range(epaisseur):
            for s in range(r):
                tableau[i][j][s]=0
    for j in range(epaisseur,w-epaisseur):
        for i in range(h-epaisseur,h):
            for s in range(r):
                tableau[i][j][s]=0
    return tableau  
                

#newim=imshow(CadreNoir(image1,20))
#plt.show()


###Q8 Rajout Cadre Noir
    
def RajoutCadre(im,epaisseur):
    h,w,r=im.shape
    tableau=np.zeros((h+2*epaisseur,w+2*epaisseur,r))
    for j in range(epaisseur,epaisseur+w):
        for i in range(epaisseur,epaisseur+h):
            for s in range(r):
                tableau[i][j][s]=im[i-epaisseur][j-epaisseur][s]
    return tableau

#newim=imshow(RajoutCadre(image1,20))
#plt.show()

###Q9 luminosite

def Luminosite(im,lum):
    h,w,r=im.shape
    tableau=np.array(im)
    for j in range(w):
        for i in range(h):
            for s in range(r):
                if tableau[i][j][s]+lum>1:
                    tableau[i][j][s]=1
                elif tableau[i][j][s]+lum<0:
                    tableau[i][j][s]=0
                else:
                    tableau[i][j][s]=tableau[i][j][s]+lum
    return tableau


#newim=imshow(Luminosite(image1,-0.3))
#plt.show()

###Q 10 filtre

def Filtre(im,p):
    h,w,r=im.shape
    tableau=np.array(im)
    if p[0]==0:
        for j in range(w):
            for i in range(h):
                tableau[i][j][0]=0
    if p[1]==0:
        for j in range(w):
            for i in range(h):
                tableau[i][j][1]=0
    if p[2]==0:
        for j in range(w):
            for i in range(h):
                tableau[i][j][2]=0
    return tableau


#newim=imshow(Filtre(image1,[1,0,0]))
#plt.show()

##Q 11   popart

tableau1a=Filtre(image1,[1,1,0]) # jaune
tableau1b=Filtre(image1,[1,0,0]) # rouge
tableau2a=Filtre(image1,[1,0,1]) # magenta
tableau2b=Filtre(image1,[0,1,0]) # vert

ligne1=np.concatenate((tableau1a,tableau1b),axis=1)
ligne2=np.concatenate((tableau2a,tableau2b),axis=1)
tab=np.concatenate((ligne1,ligne2),axis=0)
newim=imshow(tab)
plt.show()


