Optimisation de programme

Résolu/Fermé
Trompettesib Messages postés 5 Date d'inscription dimanche 28 octobre 2018 Statut Membre Dernière intervention 17 novembre 2018 - Modifié le 16 nov. 2018 à 00:53
Trompettesib Messages postés 5 Date d'inscription dimanche 28 octobre 2018 Statut Membre Dernière intervention 17 novembre 2018 - 17 nov. 2018 à 18:09
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
15 nov. 2018 à 21:35
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 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
16 nov. 2018 à 00:54
J'ai rajouté les balises en question dans son message.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
16 nov. 2018 à 06:05
Bonjour, merci
0
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 dimanche 28 octobre 2018 Statut Membre Dernière intervention 17 novembre 2018
17 nov. 2018 à 18:08
merci beaucoup !!!!!!!!
0
Trompettesib Messages postés 5 Date d'inscription dimanche 28 octobre 2018 Statut Membre Dernière intervention 17 novembre 2018
Modifié le 17 nov. 2018 à 18:10
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