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
Historique
- 24 septembre 2007 15:15:27 :
- 27 mai 2011 07:32:30 :
- plus de site internet pour la version executable
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
Problème avec un widget Canvas [ par pl29 ]
Bonjour, Un problème pour afficher une image dans un widget Canvas : Je voudrais que l'image apparaisse dans le Canvas suite au clic sur un bouton p
Editeur image [ par fl0o0w ]
Bonjour, j'ai trouvé un programme sur ce site permettant de convertir toutes les images d'un dossier (http://www.pythonfrance.com/codes/COMPACTEUR-IMA
PIL, erreur lors de l'ouverture d'une image :/ [ par rezuz ]
bonjour, j'utilise la bibliothèque PIL pour modifier des images, notament la taille. mais lorsque je lance le script et avant d'afficher les images,
Widget Treeview : besoin d'aide [ par Werteur ]
Bonjour à tous/toutes, Je suis sous python 3.1 et j'utilise le widget Treeview du module tkinter.ttk. Mon problème est que je souhaiterais ajouter
urllib2 et interface graphique [ par rezuz ]
bonjour à tous. aprés avoir eu de nombreux "problemme" avec les 72 minutes de limitation vidéo de MEGAVIDEO, j'ai décidé de faire un programme qui se
Positionner le curseur dans un widget text (Tkinter) [ par Souslannodenime ]
Voila, j'ai crée un client pour un système de chat via socket(un genre de irc-like) et j'aimer savoir comment faire pour que le widget text(qui me se
Tkinter [ par williammalavelle ]
Bonjour à tous, Question stupide : je débute sous Python et sous Tkinter. J'ai un script python que je souhaite lié à Tkinter (j'ai préparé les fenêt
Compilation module time [ par fmaloa ]
Bonjour, Je suis en train de compiler un programme python avec le module py2exe. Mon programme est une sorte de diaporama : dans une fenêtre Tkinter
Display an modify jpg image in a sql Image field [ par DardoSchuster ]
Where can i find code to save a jpg image in a SQL SERVER image field and show it ?? How can i show webcanm in my programa to take a picture and save
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
PYVISA PROBLèMEPYVISA PROBLèME par sandrine44
Cliquez pour lire la suite par sandrine44
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|