Optimisation de programme

Résolu
Trompettesib Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
Trompettesib Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour !

Je me demande si vous auriez la réponse ...
J'ai fait ce programme pour faire un cadre autour d'une photo mais pour plus de 10 pixels ça prend un temps de dingue ...
Auriez-vous une idée pour optimiser la chose ?

from PIL import Image

def modif(fich,rnouveau,vnouveau,bnouveau,nombredepixel,larg,haut) :
    for x in range(fich.size[0]) :
        for y in range (fich.size[1]) :
            (r,v,b) = fich.getpixel((x,y))
            img_out.putpixel((x+nombredepixel,y+nombredepixel),(r,v,b))
            for i in range (0,nombredepixel) :
                img_out.putpixel((i,y+nombredepixel),(rnouveau,vnouveau,bnouveau))
                img_out.putpixel((x+nombredepixel,i),(rnouveau,vnouveau,bnouveau))
            for i in range (0,nombredepixel) :
                img_out.putpixel((larg+i+nombredepixel,y+nombredepixel),(rnouveau,vnouveau,bnouveau))
                img_out.putpixel((x+nombredepixel,haut+i+nombredepixel),(rnouveau,vnouveau,bnouveau))
            for i in range (0,nombredepixel) :
                for j in range (0,nombredepixel) :
                    img_out.putpixel((i,j),(rnouveau,vnouveau,bnouveau))
            for i in range (0,nombredepixel) :
                for j in range (0,nombredepixel) :
                    img_out.putpixel((i+larg+nombredepixel,j+haut+nombredepixel),(rnouveau,vnouveau,bnouveau))
            for i in range (0,nombredepixel) :
                for j in range (0,nombredepixel) :
                    img_out.putpixel((i+larg+nombredepixel,j),(rnouveau,vnouveau,bnouveau))
            for i in range (0,nombredepixel) :
                for j in range (0,nombredepixel) :
                    img_out.putpixel((i,j+haut+nombredepixel),(rnouveau,vnouveau,bnouveau))
print ("veuillez saisir exactement le nom ainsi que l'extention de l'image")
'''imagesélectionné = input("nom de l'image")'''
print ("Sélectionner la couleur du cadre ainsi que son nombre de pixel")
'''rnouveau = int(input("r"))
vnouveau = int(input("v"))
bnouveau = int(input("b"))'''
rnouveau = 50
vnouveau = 255
bnouveau = 255
imagesélectionné = "images.jpg"
nombredepixel = int(input("nombre de pixel"))
img = Image.open(imagesélectionné)
'''img.show()'''
larg,haut = img.size
img_out = Image.new("RGB",(larg+(nombredepixel*2),haut+(nombredepixel*2)))
modif(img,rnouveau,vnouveau,bnouveau,nombredepixel,larg,haut)
img_out.show()
A voir également:

3 réponses

Utilisateur anonyme
 
Bonsoir

il y a un truc primordial avec Python, c'est l'indentation, or par défaut le site supprime les tabulations et les espaces en double.
Du coup, ton code est inexploitable.

Merci donc de lire ceci https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code et de reposter ton code correctement.
2
mamiemando Messages postés 33768 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
J'ai rajouté les balises en question dans son message.
0
Utilisateur anonyme
 
Bonjour, merci
0
frisbee
 
Bonsoir.

Ton script est beaucoup trop complexe pour faire ce genre de chose, je ne connais pas trop PIL, mais ce que tu désires faire s'obtient en quelques lignes de codes.

def encadrer(img, bord, couleur):
    larg, haut = img.size
    larg += bord * 2
    haut += bord * 2
    cadre = Image.new('RGB', (larg, haut), couleur)
    cadre.paste(img, box=(bord, bord))
    return cadre

img = Image.open("images.jpg")
cadre = encadrer(img, 15, (50, 255, 255))
cadre.show()


Là, le cadre est simplement la couleur de remplissage de la nouvelle image, si tu souhaites obtenir quelque chose de plus élaboré, il faudra te tourner vers le sous module ImageDraw de PIL pour dessiner des lignes, rectangles, cercles, etc, pour agrémenter ton cadre.
2
Trompettesib Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup !!!!!!!!
0
Trompettesib Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Le problème en fait c'est que il ne faut pas partir avec des librairies trop complexes dès le début ... et surtout faire des choses simples !!!!
0