Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REDIMENSIONNEMENT D'IMAGES


Information sur la source

Catégorie :Fichier & Disque Classé sous : redimensionnement, dimension, image, résolution, tkinter Niveau : Débutant Date de création : 18/09/2007 Date de mise à jour : 24/09/2007 15:15:27 Vu / téléchargé: 2 328 / 67

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

24 septembre 2007 15:15:27 :

Commentaires et avis

signaler à un administrateur
Commentaire de aera group le 24/09/2007 13:11:55

Salut,

J'ai une question : que doit comptenir le fichier "parameters.py" ?

signaler à un administrateur
Commentaire de aera group le 24/09/2007 13:13:00

Pardon, je n'avais pas vu ton explication à la fin du commentaire

signaler à un administrateur
Commentaire de aera group le 24/09/2007 13:19:08 9/10

C'est un bon programme, mais il y a une petite erreur : "Aide" et "À propos de ..." sont inversé (au niveau des fonctions). A par ça tout va bien

signaler à un administrateur
Commentaire de guillaume_pays_cevenol le 24/09/2007 15:19:05

Salut,
Merci pour l'info, j'ai corrigé cette erreur.
J'ai également modifié légèrement le chargement et la sauvegarde des paramètres par default pour permettre l'exécution correcte sous windows après compilation (py2exe).

Ajouter un commentaire

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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.