begin process at 2012 02 05 01:29:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier & Disque

 > REDIMENSIONNEMENT D'IMAGES

REDIMENSIONNEMENT D'IMAGES


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :27/05/2011 07:32:30 Vu / téléchargé :5 469 / 122

Auteur : guillaume_pays_cevenol

Ecrire un message privé
Site perso
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


 Fichier Zip

Les Membres Club peuvent 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 :
27 mai 2011 07:32:30 :
plus de site internet pour la version executable

 Sources du même auteur

Source avec une capture POKER : ANALYSE DES MAINS ET DES RÉSULTATS DE TOURNOIS POUR ...
Source avec une capture PROTÉGEZ VOS FICHIERS PDF EN UN SIMPLE CLIC
Source avec Zip Source avec une capture PRÉSENTATION DU MODULE VPYTHON DÉDIÉ À L'ANIMATION 3D
RECHERCHE DE CHAINES DANS UN REPERTOIRE AVEC IGU
RECHERCHE D'UNE CHAINE DANS DES FICHIERS

 Sources de la même categorie

Source avec une capture TRIER SES FILMS PAR GENRE - INTERFACE ZENITY OU LIGNE DE COM... par sarathai
LE GLOUTON ! [MANGE ET RECRACHE LES FICHIERS QU IL TROUVE D... par saigneurdushi
PYSCANLOG SCANNER DE FICHIER LOG par Guillamue06
Source avec Zip RÉPLICATOR par dhuyp
[BASH] ALERTE ESPACE DISQUE par zaggash

 Sources en rapport avec celle ci

Source avec Zip TPYCODE, TRADUCTEUR DE CODE par jonathan33350
TAQUIN 4*4 par fredericfabry
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo
Source avec une capture DÉCOUPAGE DE BD par guillaume_pays_cevenol
Source avec une capture REDIMENSIONNER TOUTES LES IMAGES D'UN DOSSIER par jbjweb

Commentaires et avis

Commentaire de aera group le 24/09/2007 13:11:55

Salut,

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

Commentaire de aera group le 24/09/2007 13:13:00

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

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

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 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,186 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales