Accueil > > > REDIMENSIONNER TOUTES LES IMAGES D'UN DOSSIER
REDIMENSIONNER TOUTES LES IMAGES D'UN DOSSIER
Information sur la source
Description
Cette source est mon premier programme en Python. J'ai utilisé wxPython et Boa Constructor pour le GUI, PIL pour le traitement d'image. J'ai crée ce petit programme par nécessité de redimensionner rapidement toutes les images d'un dossier, principalement les photos en provenance de mon appareil photo numérique. Pour faire tourner ce script, il vous faudra installer xwPython et PIL, si ce n'est pas déja fait. J'espere que cette source sera utile :)
Source
- #!/usr/bin/env python
- # -*- coding: iso-8859-1 -*-
-
- #pyThumbs - Auteur: JBJ
-
- import wx, os, sys, glob, string, Image
- import JpegImagePlugin
-
- #import Frame1
-
- #modules ={'Frame1': [1, 'Main frame of Application', u'Frame1.py']}
-
- def create(parent):
- return Frame1(parent)
-
- def resizeImage(image, hauteur, largeur, destination):
- try:
- img = Image.open(image).convert("RGB")
- img.thumbnail((hauteur,largeur), Image.ANTIALIAS)
- img.save(destination)
- return True
-
- except Error:
- return False
-
- def resizeFolder(folder, hauteur, largeur):
- try:
- os.chdir(folder)
- os.mkdir("thumbs")
- compteur_img = 0
- for nom in glob.glob('*.jpg'):
- compteur_img+=1
- nomImage = os.path.join(folder,"thumbs", "Image"+`compteur_img`+".jpg")
- resizeImage(nom, hauteur, largeur, nomImage)
-
- return True
-
- except OSError:
- return False
-
- [wxID_FRAME1, wxID_FRAME1CHEMIN, wxID_FRAME1HAUTEUR, wxID_FRAME1LONGUEUR,
- wxID_FRAME1PANEL1, wxID_FRAME1PARCOURIR, wxID_FRAME1REDIMENSIONNER,
- wxID_FRAME1STATICLINE1, wxID_FRAME1STATICLINE2, wxID_FRAME1STATICLINE3,
- wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3,
- wxID_FRAME1STATUS, wxID_FRAME1STATUSBAR1,
- ] = [wx.NewId() for _init_ctrls in range(15)]
-
- class Frame1(wx.Frame):
- def _init_ctrls(self, prnt):
- # generated method, don't edit
- wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
- pos=wx.Point(301, 152), size=wx.Size(400, 300),
- style=wx.DEFAULT_FRAME_STYLE, title=u'JBJ pyThumbs')
- self.SetClientSize(wx.Size(392, 266))
-
- self.statusBar1 = wx.StatusBar(id=wxID_FRAME1STATUSBAR1,
- name='statusBar1', parent=self, style=0)
- self.statusBar1.SetLabel(u'JBJ pyThumbs - 2006 Jean-Baptiste Jung')
- self.SetStatusBar(self.statusBar1)
-
- self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
- pos=wx.Point(0, 0), size=wx.Size(392, 243),
- style=wx.TAB_TRAVERSAL)
-
- self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
- label=u'Dossier \xe0 redimensionner :', name='staticText1',
- parent=self.panel1, pos=wx.Point(8, 16), size=wx.Size(127, 13),
- style=0)
-
- self.chemin = wx.TextCtrl(id=wxID_FRAME1CHEMIN, name=u'chemin',
- parent=self.panel1, pos=wx.Point(8, 40), size=wx.Size(256, 21),
- style=0, value=u'')
-
- self.parcourir = wx.Button(id=wxID_FRAME1PARCOURIR,
- label=u'Parcourir...', name=u'parcourir', parent=self.panel1,
- pos=wx.Point(288, 40), size=wx.Size(96, 23), style=0)
- self.parcourir.Bind(wx.EVT_BUTTON, self.OnParcourirButton,
- id=wxID_FRAME1PARCOURIR)
-
- self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
- label=u'Longueur :', name='staticText2', parent=self.panel1,
- pos=wx.Point(8, 92), size=wx.Size(52, 21), style=0)
-
- self.longueur = wx.TextCtrl(id=wxID_FRAME1LONGUEUR, name=u'longueur',
- parent=self.panel1, pos=wx.Point(72, 88), size=wx.Size(48, 21),
- style=0, value=u'800')
- self.longueur.SetMaxLength(4)
-
- self.staticLine1 = wx.StaticLine(id=wxID_FRAME1STATICLINE1,
- name='staticLine1', parent=self.panel1, pos=wx.Point(8, 72),
- size=wx.Size(376, 2), style=0)
-
- self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
- label=u'Hauteur : ', name='staticText3', parent=self.panel1,
- pos=wx.Point(208, 92), size=wx.Size(49, 13), style=0)
-
- self.hauteur = wx.TextCtrl(id=wxID_FRAME1HAUTEUR, name=u'hauteur',
- parent=self.panel1, pos=wx.Point(272, 88), size=wx.Size(48, 21),
- style=0, value=u'600')
- self.hauteur.SetMaxLength(4)
-
- self.redimensionner = wx.Button(id=wxID_FRAME1REDIMENSIONNER,
- label=u'Redimensionner le dossier', name=u'redimensionner',
- parent=self.panel1, pos=wx.Point(8, 160), size=wx.Size(136, 23),
- style=0)
- self.redimensionner.Bind(wx.EVT_BUTTON, self.OnRedimensionnerButton,
- id=wxID_FRAME1REDIMENSIONNER)
-
- self.staticLine2 = wx.StaticLine(id=wxID_FRAME1STATICLINE2,
- name='staticLine2', parent=self.panel1, pos=wx.Point(184, 128),
- size=wx.Size(1, 2), style=0)
-
- self.staticLine3 = wx.StaticLine(id=wxID_FRAME1STATICLINE3,
- name='staticLine3', parent=self.panel1, pos=wx.Point(8, 144),
- size=wx.Size(376, 2), style=0)
-
- self.status = wx.StaticText(id=wxID_FRAME1STATUS, label=u'',
- name=u'status', parent=self.panel1, pos=wx.Point(32, 208),
- size=wx.Size(0, 13), style=0)
-
- def __init__(self, parent):
- self._init_ctrls(parent)
-
- def OnParcourirButton(self, event):
- dialog = wx.DirDialog( None, message ='Sélectionnez le dossier à redimensionner:' )
- # Show the dialog and get user input
-
- if dialog.ShowModal() == wx.ID_OK:
- self.chemin.SetValue(dialog.GetPath())
-
- dialog.Destroy()
-
- def OnRedimensionnerButton(self, event):
- #Récupérer les parametres et utiliser la methode resizeFolder
- erreur = False
- if os.path.isdir(self.chemin.GetValue()):
- folder = self.chemin.GetValue()
- else:
- erreur = True
- self.status.SetLabel(str(self.chemin.GetValue())+" n'est pas un dossier")
-
- if self.hauteur.GetValue().isdigit() and int(self.hauteur.GetValue()) >0 \
- and int(self.hauteur.GetValue()) <= 2000:
- hauteurimg = int(self.hauteur.GetValue())
-
- else:
- erreur = True
- self.status.SetLabel("la hauteur n'est pas correcte.")
-
- if self.longueur.GetValue().isdigit() and int(self.longueur.GetValue()) >0 \
- and int(self.longueur.GetValue()) <= 2000:
- largeurimg = int(self.longueur.GetValue())
-
- else:
- erreur = True
- self.status.SetLabel("La longueur n'est pas correcte.")
-
- if erreur == False:
- self.status.SetLabel("Redimensionnement en cours...")
- if resizeFolder(folder, hauteurimg, largeurimg):
- self.status.SetLabel("Le dossier "+ str(folder)+" à été redimensionné.")
-
- else:
- self.status.SetLabel("Problème. Vérifiez qu'un dossier du même nom n'existe pas déja.")
- #else:
- # self.status.SetLabel("Erreur. Vérifiez vos paramètres de redimensionnement.")
-
- class pyThumbs(wx.App):
- def OnInit(self):
- wx.InitAllImageHandlers()
- self.main = create(None)
- self.main.Show()
- self.SetTopWindow(self.main)
- return True
-
- def main():
- application = pyThumbs(0)
- application.MainLoop()
-
- if __name__ == '__main__':
- main()
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
#pyThumbs - Auteur: JBJ
import wx, os, sys, glob, string, Image
import JpegImagePlugin
#import Frame1
#modules ={'Frame1': [1, 'Main frame of Application', u'Frame1.py']}
def create(parent):
return Frame1(parent)
def resizeImage(image, hauteur, largeur, destination):
try:
img = Image.open(image).convert("RGB")
img.thumbnail((hauteur,largeur), Image.ANTIALIAS)
img.save(destination)
return True
except Error:
return False
def resizeFolder(folder, hauteur, largeur):
try:
os.chdir(folder)
os.mkdir("thumbs")
compteur_img = 0
for nom in glob.glob('*.jpg'):
compteur_img+=1
nomImage = os.path.join(folder,"thumbs", "Image"+`compteur_img`+".jpg")
resizeImage(nom, hauteur, largeur, nomImage)
return True
except OSError:
return False
[wxID_FRAME1, wxID_FRAME1CHEMIN, wxID_FRAME1HAUTEUR, wxID_FRAME1LONGUEUR,
wxID_FRAME1PANEL1, wxID_FRAME1PARCOURIR, wxID_FRAME1REDIMENSIONNER,
wxID_FRAME1STATICLINE1, wxID_FRAME1STATICLINE2, wxID_FRAME1STATICLINE3,
wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3,
wxID_FRAME1STATUS, wxID_FRAME1STATUSBAR1,
] = [wx.NewId() for _init_ctrls in range(15)]
class Frame1(wx.Frame):
def _init_ctrls(self, prnt):
# generated method, don't edit
wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
pos=wx.Point(301, 152), size=wx.Size(400, 300),
style=wx.DEFAULT_FRAME_STYLE, title=u'JBJ pyThumbs')
self.SetClientSize(wx.Size(392, 266))
self.statusBar1 = wx.StatusBar(id=wxID_FRAME1STATUSBAR1,
name='statusBar1', parent=self, style=0)
self.statusBar1.SetLabel(u'JBJ pyThumbs - 2006 Jean-Baptiste Jung')
self.SetStatusBar(self.statusBar1)
self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
pos=wx.Point(0, 0), size=wx.Size(392, 243),
style=wx.TAB_TRAVERSAL)
self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
label=u'Dossier \xe0 redimensionner :', name='staticText1',
parent=self.panel1, pos=wx.Point(8, 16), size=wx.Size(127, 13),
style=0)
self.chemin = wx.TextCtrl(id=wxID_FRAME1CHEMIN, name=u'chemin',
parent=self.panel1, pos=wx.Point(8, 40), size=wx.Size(256, 21),
style=0, value=u'')
self.parcourir = wx.Button(id=wxID_FRAME1PARCOURIR,
label=u'Parcourir...', name=u'parcourir', parent=self.panel1,
pos=wx.Point(288, 40), size=wx.Size(96, 23), style=0)
self.parcourir.Bind(wx.EVT_BUTTON, self.OnParcourirButton,
id=wxID_FRAME1PARCOURIR)
self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
label=u'Longueur :', name='staticText2', parent=self.panel1,
pos=wx.Point(8, 92), size=wx.Size(52, 21), style=0)
self.longueur = wx.TextCtrl(id=wxID_FRAME1LONGUEUR, name=u'longueur',
parent=self.panel1, pos=wx.Point(72, 88), size=wx.Size(48, 21),
style=0, value=u'800')
self.longueur.SetMaxLength(4)
self.staticLine1 = wx.StaticLine(id=wxID_FRAME1STATICLINE1,
name='staticLine1', parent=self.panel1, pos=wx.Point(8, 72),
size=wx.Size(376, 2), style=0)
self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
label=u'Hauteur : ', name='staticText3', parent=self.panel1,
pos=wx.Point(208, 92), size=wx.Size(49, 13), style=0)
self.hauteur = wx.TextCtrl(id=wxID_FRAME1HAUTEUR, name=u'hauteur',
parent=self.panel1, pos=wx.Point(272, 88), size=wx.Size(48, 21),
style=0, value=u'600')
self.hauteur.SetMaxLength(4)
self.redimensionner = wx.Button(id=wxID_FRAME1REDIMENSIONNER,
label=u'Redimensionner le dossier', name=u'redimensionner',
parent=self.panel1, pos=wx.Point(8, 160), size=wx.Size(136, 23),
style=0)
self.redimensionner.Bind(wx.EVT_BUTTON, self.OnRedimensionnerButton,
id=wxID_FRAME1REDIMENSIONNER)
self.staticLine2 = wx.StaticLine(id=wxID_FRAME1STATICLINE2,
name='staticLine2', parent=self.panel1, pos=wx.Point(184, 128),
size=wx.Size(1, 2), style=0)
self.staticLine3 = wx.StaticLine(id=wxID_FRAME1STATICLINE3,
name='staticLine3', parent=self.panel1, pos=wx.Point(8, 144),
size=wx.Size(376, 2), style=0)
self.status = wx.StaticText(id=wxID_FRAME1STATUS, label=u'',
name=u'status', parent=self.panel1, pos=wx.Point(32, 208),
size=wx.Size(0, 13), style=0)
def __init__(self, parent):
self._init_ctrls(parent)
def OnParcourirButton(self, event):
dialog = wx.DirDialog( None, message ='Sélectionnez le dossier à redimensionner:' )
# Show the dialog and get user input
if dialog.ShowModal() == wx.ID_OK:
self.chemin.SetValue(dialog.GetPath())
dialog.Destroy()
def OnRedimensionnerButton(self, event):
#Récupérer les parametres et utiliser la methode resizeFolder
erreur = False
if os.path.isdir(self.chemin.GetValue()):
folder = self.chemin.GetValue()
else:
erreur = True
self.status.SetLabel(str(self.chemin.GetValue())+" n'est pas un dossier")
if self.hauteur.GetValue().isdigit() and int(self.hauteur.GetValue()) >0 \
and int(self.hauteur.GetValue()) <= 2000:
hauteurimg = int(self.hauteur.GetValue())
else:
erreur = True
self.status.SetLabel("la hauteur n'est pas correcte.")
if self.longueur.GetValue().isdigit() and int(self.longueur.GetValue()) >0 \
and int(self.longueur.GetValue()) <= 2000:
largeurimg = int(self.longueur.GetValue())
else:
erreur = True
self.status.SetLabel("La longueur n'est pas correcte.")
if erreur == False:
self.status.SetLabel("Redimensionnement en cours...")
if resizeFolder(folder, hauteurimg, largeurimg):
self.status.SetLabel("Le dossier "+ str(folder)+" à été redimensionné.")
else:
self.status.SetLabel("Problème. Vérifiez qu'un dossier du même nom n'existe pas déja.")
#else:
# self.status.SetLabel("Erreur. Vérifiez vos paramètres de redimensionnement.")
class pyThumbs(wx.App):
def OnInit(self):
wx.InitAllImageHandlers()
self.main = create(None)
self.main.Show()
self.SetTopWindow(self.main)
return True
def main():
application = pyThumbs(0)
application.MainLoop()
if __name__ == '__main__':
main()
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Association d'image [ par DoudouBidou ]
Bonjour, j'ai une application qui utilise Python (jusque là tout va bien) et wxPython je voudrais savoir s'il est possible (sans utiliser PIL) d
Enregistrer une image [ par misteraoul ]
Je suis désolé mais je ne trouve nul part comment faire pour enregistrer un caneva sous Tkinter en image bmp Est ce que c'est possible ? S
modifier les metadonnées [ par airod ]
Je cherche a etre mis sur la voie. Comment peut on editer les champs IPTC (métadonnées) propre a une image? Faut il lire le fichier image c
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 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
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|