#!/usr/bin/python3.4
# Script Python pour fusionner les fichiers D*.png et G*.png en des fichiers DG*.png
# * variant de 001 à 099.
# Dans le but de fabriquer des fichiers en stéréoscopie croisée, D est placé à gauche et G à droite
# Pour l'exécuter, ouvrir un terminal et taper :
# ./U-af400py
# Ce fichier peut suppléer la commande montage d'imagemagick si celle-ci ne fonctionne pas correctement.

import matplotlib.pyplot as pp
import numpy as np
import sys
import os.path

def help():
    print("Ce script fusionne les images D*.png (à gauche) et G*.png (à droite) en fichiers DG*.png")
    print("Le rang des fichiers peut varier de 1 à 999.")
    print("Syntaxe :")
    print("Pour fusionner les images depuis le rang m au rang n inclus,")
    print("U-af400py m n")
    print("")
    print("Pour fusionner toutes les images présentes à partir de l'image 1,")
    print("U-af400py all")
#fin help
         
# convertit un entier de trois chiffres au plus en chaîne de trois caractères éventuellement préfixée par des 0
def inttocode(n):
    if n<10:
        return("00"+str(n))
    elif n<100:
        return("0"+str(n))
    else:
        return(str(n))
#fin inttocode

# Fusionne le fichier Dcode.png avec Gcode.png
# code est la chaîne de caractères constituée de trois chiffres, qui suit le nom D ou G du fichier
def fusionne(code):
    image1=pp.imread("D"+code+".png")
    image2=pp.imread("G"+code+".png")
    image12=np.concatenate((image1,image2),axis=1)
    # pp.imshow(image21)
    # pp.show()
    pp.imsave("DG"+code+".png",image12,format="png")
#fin fusionne

# Traite les images depuis le rang m jusqu'au rang n
def traite(m,n):    
    for i in range(m,n+1):
        code=inttocode(i)
        fusionne(code)
#fin traite

# Traite toutes les images présentes sur le disque à partir de l'image 1
def traiteall():
    n=1
    termine=False
    while (not termine):
        code=inttocode(i)
        Dpresent=os.path.isfile("D"+code+".png")
        Gpresent=os.path.isfile("G"+code+".png")
        if Dpresent and Gpresent:
            fusionne(code)
            i=i+1
        else:
            termine=True;
#fin traiteall

# *********** Programme principal *************         
nbParametres=len(sys.argv)
if (nbParametres>3) or (nbParametres==1):
    help()
elif (nbParametres==2):
    if (sys.argv[1]!="all"):
        help()
    else:
        traiteall();
else:
    nbmin=int(sys.argv[1])
    nbmax=int(sys.argv[2])
    if (nbmin<=0) or (nbmin>nbmax) or (nbmax>999):
        help
    else:
        traite(nbmin,nbmax)

