Accueil > > > REDIMENSIONNEMENT D'IMAGES
REDIMENSIONNEMENT D'IMAGES
Information sur la source
Description
Un petit script avec interface graphique permettant de redimensionner des images au format jpg. Le principe est simple, on va analyser le contenu d'un répertoire "source", et redimensionner toutes les images au format jpg du répertoire "source" dans un repertoire "destination". Les répertoires "source", et "destination", ainsi que les dimensions des images ont des valeurs par default modifiable via les menu de controle. Les paramètres par default sont enregistrés dans un second fichier .txt appellé "parameters.txt". Ils sont modifiable via l'interface graphique grâce au menu "Paramètres --> Préférences". J'ai inséré le code du fichier "parameters.txt" à la fin du code principal (5 dernières lignes)...
Source
- #! D:/Python25/python.exe
- import Image
- import Tkinter
- import tkFileDialog
- import os
-
- class PySize:
- def __init__(self, parent):
- """Initialisation de l'IGU"""
- self.parent=parent
- self.parent.title("Redimensionnement d'image")
- self.option=0#Variable permettant de definir si on modifie les parametres par default
- self.menuBar()
- self.widget()
- self.container=Tkinter.Frame(self.parent)
- self.interface=Tkinter.Text(self.container)
- self.interface.insert('end','Bonjour et bienvenu\nPour tout renseignement tonny.rosca@gmail.com\n...')
- self.interface.pack(side='left',expand='YES',fill='both')
- self.yscrollbar=Tkinter.Scrollbar(self.container)
- self.yscrollbar.pack(side='right',fill='y')
- self.container.pack(fill='both')
- self.yscrollbar.config(command=self.interface.yview)
- self.interface.insert('end','Chargement des parametres\n...')
- try:
- param={}
- fileOption=open('parameters.txt','r')
- while 1:
- line=fileOption.readline()
- if line=="":
- break
- exec(line)
- self.pathIn=param['pathIn']
- self.pathOut=param['pathOut']
- self.L=param['L']
- self.l=param['l']
- self.interface.insert('end',"Parametres charges avec succes :\n......Repertoire d'entree : "+str(self.pathIn)+"\n......Repertoire de sortie : "+str(self.pathOut)+"\n......Dimension des images de sortie : "+str(self.L)+"*"+str(self.l)+"\n...")
- except:
- self.interface.insert('end',"Erreur lors du chargement des parametres ! Verifier le contenu du fichier 'parameters.txt'\n...")
-
- def menuBar(self):
- """Initialisation de la barre de menu"""
- menu=Tkinter.Menu()
- fichier=Tkinter.Menu()
- fichier.add_command(label='Quitter',command=self.parent.destroy)
- menu.add_cascade(label='Fichier',menu=fichier)
- parameters=Tkinter.Menu()
- parameters.add_command(label="Choix du repertoire d'entree",command=self.askPathIn)
- parameters.add_command(label="Choix du repertoire de sortie",command=self.askPathOut)
- parameters.add_command(label="Choix de la dimension des images",command=self.outSize)
- parameters.add_command(label="Preferences",command=self.options)
- menu.add_cascade(label='Parametres',menu=parameters)
- aide=Tkinter.Menu()
- aide.add_command(label='A propos...',command=self.aboutVersion)
- aide.add_command(label='Aide',command=self.aboutAuthor)
- menu.add_cascade(label='?',menu=aide)
- self.parent.config(menu=menu)
-
- def aboutAuthor(self):
- """Joindre l'auteur"""
- self.interface.insert('end','1. Choisir le repertoire contenant les images a redimensionner\n...2. Choisir le repertoire de sortie\n...3. Choisir les dimensions des images de sortie\n...Pour tout renseignement tonny.rosca@gmail.com\n...')
- self.yscrollbar.config(command=self.interface.yview)
-
- def aboutVersion(self):
- """Version"""
- self.interface.insert('end',"Redimensionnement d'image V1.3\n...")
- self.yscrollbar.config(command=self.interface.yview)
-
- def widget(self):
- """Boutons d'action"""
- self.button=Tkinter.Frame(self.parent)
- # self.b0=Tkinter.Button(self.button,text="Choisir un repertoire d'entree",command=self.askPathIn)
- # self.b1=Tkinter.Button(self.button,text="Choisir un repertoire de sortie",command=self.askPathOut)
- # self.b2=Tkinter.Button(self.button,text="Choisir les dimensions des images",command=self.outSize)
- self.b3=Tkinter.Button(self.button,text="Effectuer le traitement",command=self.searchFiles)
- # self.b0.pack(side='left',expand='YES',fill='both')
- # self.b1.pack(side='left',expand='YES',fill='both')
- # self.b2.pack(side='left',expand='YES',fill='both')
- self.b3.pack(side='left',expand='YES',fill='both')
- self.button.pack(side='top',expand='YES',fill='both')
-
- def askPathIn(self):
- """Fenetre de selection d'un repertoire d'entree"""
- self.pathIn=tkFileDialog.askdirectory(parent=self.parent,initialdir=self.pathIn,title="Choisissez un repertoire d'entree")
- self.interface.insert('end',"Repertoire d'entree : "+str(self.pathIn)+"\n...")
-
- def askPathOut(self):
- """Fenetre de selection d'un repertoire de sortie"""
- self.pathOut=tkFileDialog.askdirectory(parent=self.parent,initialdir=self.pathOut,title='Choisissez un repertoire de sortie')
- self.interface.insert('end','Repertoire de sortie : '+str(self.pathOut)+'\n...')
-
- def searchFiles(self):
- """Traitement des images en parcourant le repertoire"""
- count=0
- path=os.listdir(self.pathIn)
- self.interface.insert('end',"Traitement des l'images en cours\n...")
- for i in range(len(path)):
- if path[i].count('.jpg')==1 or path[i].count('.JPG')==1:
- count+=1
- self.fileName=path[i]
- self.resize()
- self.interface.insert('end',"Image "+str(count)+" en cours de traitement\n...")
- root.update()
- self.interface.insert('end',"Traitement effectue avec succes\n...")
-
- def resize(self):
- """"Redimensionne une image"""
- imageResize=Image.open(self.pathIn+'/'+self.fileName,'r')
- #On regarde si l'image est horizontale ou verticale
- if imageResize.size[0]>imageResize.size[1]:
- imageResize.thumbnail((self.L,self.l))
- imageOut=Image.new(imageResize.mode,(self.L,self.l))
- imageOut.paste(imageResize,(0,0,imageResize.size[0],imageResize.size[1]))
- else:
- imageResize.thumbnail((self.l,self.L))
- imageOut=Image.new(imageResize.mode,(self.l,self.L))
- imageOut.paste(imageResize,(0,0,imageResize.size[0],imageResize.size[1]))
- imageOut.save(self.pathOut+'/'+self.fileName[:-4]+'_'+str(self.L)+'_'+str(self.l)+'.jpg',"JPEG")
-
- def outSize(self):
- """Fenetre de choix des dimensions des images de sortie"""
- self.paramWindow=Tkinter.Toplevel()
- self.paramWindow.title("Dimensions des images de sortie")
- container=Tkinter.Frame(self.paramWindow)
- self.xPixel=Tkinter.Entry(container)
- self.xPixel.pack(fill='x',side='left')
- self.xPixel.insert('0','800')
- self.yPixel=Tkinter.Entry(container)
- self.yPixel.pack(fill='x',side='left')
- self.yPixel.insert('0','600')
- containerButton=Tkinter.Frame(self.paramWindow)
- buttonValid=Tkinter.Button(containerButton,text='Valider',command=self.validSize)
- buttonValid.pack(fill='x')
- buttonCancel=Tkinter.Button(containerButton,text='Annuler',command=self.paramWindow.destroy)
- buttonCancel.pack(fill='x')
- container.pack(fill='x')
- containerButton.pack(fill='x')
-
- def validSize(self):
- """Valide le choix des dimensions des images de sortie"""
- if int(self.xPixel.get())>int(self.yPixel.get()):
- self.L=int(self.xPixel.get())
- self.l=int(self.yPixel.get())
- else:
- self.L=int(self.yPixel.get())
- self.l=int(self.xPixel.get())
- self.interface.insert('end',"Dimensions des images de sortie : "+str(self.L)+"*"+str(self.l)+"\n...")
- self.paramWindow.destroy()
- if self.option==1:#On verifie si les modifications doivent etre enregistrees
- self.option=0
- self.validDefault()
-
- def options(self):
- """Modification des parametres par default"""
- self.option=1
- self.interface.insert('end',"Modification des parametres par default\n...")
- self.askPathIn()
- self.askPathOut()
- self.outSize()
-
- def validDefault(self):
- self.interface.insert('end',"Sauvegarde des preferences\n...")
- try:
- fileIn=open('parameters.txt','w')
- fileIn.write("param['pathIn']='"+self.pathIn+"'\nparam['pathOut']='"+self.pathOut+"'\nparam['L']="+str(self.L)+"\nparam['l']="+str(self.l)+"\n")
- fileIn.close()
- self.interface.insert('end',"Sauvegarde effectuee avec succes\n...")
- except:
- self.interface.insert('end',"Erreur lors de la sauvegarde : Verifiez vos droit en ecriture sur le fichier 'parameters.py'")
-
-
- Image.init()
- root=Tkinter.Tk()
- myapp=PySize(root)
- root.mainloop()
-
- #fichier parameters.txt a sauvegarder dans le meme repertoire
- #param['pathIn']='D:/Images'
- #param['pathOut']='D:/Images'
- #param['L']=800
- #param['l']=600
#! D:/Python25/python.exe
import Image
import Tkinter
import tkFileDialog
import os
class PySize:
def __init__(self, parent):
"""Initialisation de l'IGU"""
self.parent=parent
self.parent.title("Redimensionnement d'image")
self.option=0#Variable permettant de definir si on modifie les parametres par default
self.menuBar()
self.widget()
self.container=Tkinter.Frame(self.parent)
self.interface=Tkinter.Text(self.container)
self.interface.insert('end','Bonjour et bienvenu\nPour tout renseignement tonny.rosca@gmail.com\n...')
self.interface.pack(side='left',expand='YES',fill='both')
self.yscrollbar=Tkinter.Scrollbar(self.container)
self.yscrollbar.pack(side='right',fill='y')
self.container.pack(fill='both')
self.yscrollbar.config(command=self.interface.yview)
self.interface.insert('end','Chargement des parametres\n...')
try:
param={}
fileOption=open('parameters.txt','r')
while 1:
line=fileOption.readline()
if line=="":
break
exec(line)
self.pathIn=param['pathIn']
self.pathOut=param['pathOut']
self.L=param['L']
self.l=param['l']
self.interface.insert('end',"Parametres charges avec succes :\n......Repertoire d'entree : "+str(self.pathIn)+"\n......Repertoire de sortie : "+str(self.pathOut)+"\n......Dimension des images de sortie : "+str(self.L)+"*"+str(self.l)+"\n...")
except:
self.interface.insert('end',"Erreur lors du chargement des parametres ! Verifier le contenu du fichier 'parameters.txt'\n...")
def menuBar(self):
"""Initialisation de la barre de menu"""
menu=Tkinter.Menu()
fichier=Tkinter.Menu()
fichier.add_command(label='Quitter',command=self.parent.destroy)
menu.add_cascade(label='Fichier',menu=fichier)
parameters=Tkinter.Menu()
parameters.add_command(label="Choix du repertoire d'entree",command=self.askPathIn)
parameters.add_command(label="Choix du repertoire de sortie",command=self.askPathOut)
parameters.add_command(label="Choix de la dimension des images",command=self.outSize)
parameters.add_command(label="Preferences",command=self.options)
menu.add_cascade(label='Parametres',menu=parameters)
aide=Tkinter.Menu()
aide.add_command(label='A propos...',command=self.aboutVersion)
aide.add_command(label='Aide',command=self.aboutAuthor)
menu.add_cascade(label='?',menu=aide)
self.parent.config(menu=menu)
def aboutAuthor(self):
"""Joindre l'auteur"""
self.interface.insert('end','1. Choisir le repertoire contenant les images a redimensionner\n...2. Choisir le repertoire de sortie\n...3. Choisir les dimensions des images de sortie\n...Pour tout renseignement tonny.rosca@gmail.com\n...')
self.yscrollbar.config(command=self.interface.yview)
def aboutVersion(self):
"""Version"""
self.interface.insert('end',"Redimensionnement d'image V1.3\n...")
self.yscrollbar.config(command=self.interface.yview)
def widget(self):
"""Boutons d'action"""
self.button=Tkinter.Frame(self.parent)
# self.b0=Tkinter.Button(self.button,text="Choisir un repertoire d'entree",command=self.askPathIn)
# self.b1=Tkinter.Button(self.button,text="Choisir un repertoire de sortie",command=self.askPathOut)
# self.b2=Tkinter.Button(self.button,text="Choisir les dimensions des images",command=self.outSize)
self.b3=Tkinter.Button(self.button,text="Effectuer le traitement",command=self.searchFiles)
# self.b0.pack(side='left',expand='YES',fill='both')
# self.b1.pack(side='left',expand='YES',fill='both')
# self.b2.pack(side='left',expand='YES',fill='both')
self.b3.pack(side='left',expand='YES',fill='both')
self.button.pack(side='top',expand='YES',fill='both')
def askPathIn(self):
"""Fenetre de selection d'un repertoire d'entree"""
self.pathIn=tkFileDialog.askdirectory(parent=self.parent,initialdir=self.pathIn,title="Choisissez un repertoire d'entree")
self.interface.insert('end',"Repertoire d'entree : "+str(self.pathIn)+"\n...")
def askPathOut(self):
"""Fenetre de selection d'un repertoire de sortie"""
self.pathOut=tkFileDialog.askdirectory(parent=self.parent,initialdir=self.pathOut,title='Choisissez un repertoire de sortie')
self.interface.insert('end','Repertoire de sortie : '+str(self.pathOut)+'\n...')
def searchFiles(self):
"""Traitement des images en parcourant le repertoire"""
count=0
path=os.listdir(self.pathIn)
self.interface.insert('end',"Traitement des l'images en cours\n...")
for i in range(len(path)):
if path[i].count('.jpg')==1 or path[i].count('.JPG')==1:
count+=1
self.fileName=path[i]
self.resize()
self.interface.insert('end',"Image "+str(count)+" en cours de traitement\n...")
root.update()
self.interface.insert('end',"Traitement effectue avec succes\n...")
def resize(self):
""""Redimensionne une image"""
imageResize=Image.open(self.pathIn+'/'+self.fileName,'r')
#On regarde si l'image est horizontale ou verticale
if imageResize.size[0]>imageResize.size[1]:
imageResize.thumbnail((self.L,self.l))
imageOut=Image.new(imageResize.mode,(self.L,self.l))
imageOut.paste(imageResize,(0,0,imageResize.size[0],imageResize.size[1]))
else:
imageResize.thumbnail((self.l,self.L))
imageOut=Image.new(imageResize.mode,(self.l,self.L))
imageOut.paste(imageResize,(0,0,imageResize.size[0],imageResize.size[1]))
imageOut.save(self.pathOut+'/'+self.fileName[:-4]+'_'+str(self.L)+'_'+str(self.l)+'.jpg',"JPEG")
def outSize(self):
"""Fenetre de choix des dimensions des images de sortie"""
self.paramWindow=Tkinter.Toplevel()
self.paramWindow.title("Dimensions des images de sortie")
container=Tkinter.Frame(self.paramWindow)
self.xPixel=Tkinter.Entry(container)
self.xPixel.pack(fill='x',side='left')
self.xPixel.insert('0','800')
self.yPixel=Tkinter.Entry(container)
self.yPixel.pack(fill='x',side='left')
self.yPixel.insert('0','600')
containerButton=Tkinter.Frame(self.paramWindow)
buttonValid=Tkinter.Button(containerButton,text='Valider',command=self.validSize)
buttonValid.pack(fill='x')
buttonCancel=Tkinter.Button(containerButton,text='Annuler',command=self.paramWindow.destroy)
buttonCancel.pack(fill='x')
container.pack(fill='x')
containerButton.pack(fill='x')
def validSize(self):
"""Valide le choix des dimensions des images de sortie"""
if int(self.xPixel.get())>int(self.yPixel.get()):
self.L=int(self.xPixel.get())
self.l=int(self.yPixel.get())
else:
self.L=int(self.yPixel.get())
self.l=int(self.xPixel.get())
self.interface.insert('end',"Dimensions des images de sortie : "+str(self.L)+"*"+str(self.l)+"\n...")
self.paramWindow.destroy()
if self.option==1:#On verifie si les modifications doivent etre enregistrees
self.option=0
self.validDefault()
def options(self):
"""Modification des parametres par default"""
self.option=1
self.interface.insert('end',"Modification des parametres par default\n...")
self.askPathIn()
self.askPathOut()
self.outSize()
def validDefault(self):
self.interface.insert('end',"Sauvegarde des preferences\n...")
try:
fileIn=open('parameters.txt','w')
fileIn.write("param['pathIn']='"+self.pathIn+"'\nparam['pathOut']='"+self.pathOut+"'\nparam['L']="+str(self.L)+"\nparam['l']="+str(self.l)+"\n")
fileIn.close()
self.interface.insert('end',"Sauvegarde effectuee avec succes\n...")
except:
self.interface.insert('end',"Erreur lors de la sauvegarde : Verifiez vos droit en ecriture sur le fichier 'parameters.py'")
Image.init()
root=Tkinter.Tk()
myapp=PySize(root)
root.mainloop()
#fichier parameters.txt a sauvegarder dans le meme repertoire
#param['pathIn']='D:/Images'
#param['pathOut']='D:/Images'
#param['L']=800
#param['l']=600
Conclusion
La version executable du code pour windows ainsi que les scripts python sont disponibles sur monsite internet : http://gdaveau.free.fr
Historique
- 24 septembre 2007 15:15:27 :
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Importer une image dans Tkinter... [ par skools ]
Bonjour à tous, Et pardon à ceux à qui j'ai envoyé des messages perso, je n'arrivais pas à poster un suget dans le forum... Voilà, après des heures d
envoie d image sur le réseau [ par amina22 ]
bonjour,je veux savoir si on peut envoyer des fichiers (audio,vidéo,image..) a travers le réseau en utilisant la communication client/serveur(socket)
Créer une image à partir d'un canvas [ par gaulthier ]
Salut,comment peut-on créer une image (jpg de préférence) a partir du contenu d'un canvas?J'utilise PIL.Merci d'avance pour vos réponses!
Pop-up personnalisé [ par Lacro59 ]
Bonjour, En regardant un peu les différentes documentations sur wx.TaskBarIcon et wx.Menu pour la création d'un menu pop-up, je me demandais si :- il
Cacher une image [ par akkuciha ]
Bonjour à tous, Le but de mon application est de trouver l'image "Question" parmis les images "réponses" possibles.J'ai une zone d'image faite avec gl
chargement d'une image [ par panthere007 ]
Hellohello je voudrai mettre une image de fond dans une fenêtre (caneva ?) pour ensuite placer mes control par dessus j'ai pas mal chercher mai on dir
Tkinter:Stocker et Afficher la valeur d'un Entry [ par djisse95 ]
Bonjour a tous! Je debute avec Tkinter,et je voudrais savoir, pourquoi ce code ne marche pas, et comment faire pour qu'il marche!Le but de ce code est
Tkinter et changment d'image [ par vega95 ]
Bonjour,j'ai écrit le code suivant pour afficher une image à l'accueil en attendant le début du programme. Une fois le bouton b1 enfoncé, je voudrais
Tkinter + Text + coloration [ par Kickaha59 ]
Bonjour à tous,Je souhaite colorer certains mots afficher dans une fenêtre avec la fonction Text de Tkinter.Par exemple je veux colorer en vert tout l
Problème avec une 2éme fenêtre Tkinter [ par ProRamm ]
Bonsoir a tous,Je suis débutant en programmation, j'ai conçu un petit programme ou dedans j'ai inclus un bouton qui m'ouvre une 2éme fenêtre en import
|
Derniers Blogs
[WINDOWSPHONE7] LECTEUR DE FLUX RSS[WINDOWSPHONE7] LECTEUR DE FLUX RSS par Vko
Parce que j'aime pas tester à moitié, je me suis amusé à développer un petit lecteur de flux RSS avec un look qui vous rappellera surement quelque chose :) La RC de Visual Studio est plutôt molle mais fonctionne correctement. L'émulateur est pas...
Cliquez pour lire la suite de l'article par Vko [WP7] L'éMULATEUR WINDOWS PHONE 7 EST MULTITâCHE[WP7] L'éMULATEUR WINDOWS PHONE 7 EST MULTITâCHE par KooKiz
Une question qui reste en suspend concernant Windows Phone 7 est de savoir si le système permettra à plusieurs applications de s'exécuter simultanément, ou si un système de mise en pause similaire à celui de l'iPhone sera adopté. Même si cela ne perm...
Cliquez pour lire la suite de l'article par KooKiz PRéSENTATION CLUB MOSS CE JOUR "LA NOUVELLE ARCHITECTURE DE SERVICES SHAREPOINT 2010".PRéSENTATION CLUB MOSS CE JOUR "LA NOUVELLE ARCHITECTURE DE SERVICES SHAREPOINT 2010". par Patrick Guimonet
Ca y est la sortie RTM de SharePoint 2010 est annoncée pour le 16 avril 2010 (annonce faite ce jour par Erol Giraudy lors de la réunion du club MOSS). Vous pourrez trouver ici les slides de ma présentation du jour dans le cadre du club MOSS : 201...
Cliquez pour lire la suite de l'article par Patrick Guimonet [WINDOWPHONE7] PREMIERS PAS[WINDOWPHONE7] PREMIERS PAS par Vko
Hop voici les premiers pas avec les outils de développement pour Windows Phone 7. Premier changement suite à l'installation des outils : les type de projets pour la plateforme Windows Phone 7. Les projets se découpent en deux groupes : Les projet...
Cliquez pour lire la suite de l'article par Vko [WP7] LE SDK DE WINDOWS PHONE 7 EST DISPONIBLE ![WP7] LE SDK DE WINDOWS PHONE 7 EST DISPONIBLE ! par KooKiz
Comme le titre l'indique, une première CTP du kit de développement pour Windows Phone 7 est disponible. Basé sur Visual Studio 2010 Express, il propose de développer des applications pour WP7 en Silverlight ou XNA 4. Un émulateur est bien entendu de l...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|