
Envoyé par
fred1599
Si mes souvenirs sont bons, il faut sauvegarder ton image...
Non; PIL sauve automatiquement l'image dans un fichier temporaire.
Si c'est le même problème que chez moi, il ouvre la visionneuse de photo Windows mais n'affiche pas l'image.
La raison étant que la visionneuse est invoquée au moyen de l'association de fichier, par la commande suivante:
start /wait c:\users\<username>\appdata\local\temp\tmpvv3nu5.BMP && del /f c:\users\<username>\appdata\local\temp\tmpvv3nu5.BMP
où tmpvv3nu5.BMP est un nom généré par tempfile.mktemp.
Sous Windows 7 (& Vista), le /wait n'a pas l'effet escompté et le delete est exécuté juste après le lancement de la visionneuse, avant même que la visionneuse ait le temps d'ouvrir le fichier.
Ce qui se passe, je pense, c'est qu'un sous-shell est invoqué par la commande start, l'association de fichier trouve la visionneuse windows et l'exécute, mais sans le /wait (sans attendre la fermeture du programme); la main est rendue au shell principal (invoqué par os.system) et la commande del est exécutée.
Une solution est de remplacer une ligne dans le module ImageShow.py (normalement dans <python dir>\Lib\site-packages\PIL), dans la classe WindowsViewer, à la ligne 99 pour PIL 1.1.7:
return 'start /wait %s && del /f %s' % (file, file)
à remplacer par:
return 'start /wait rundll32.exe "c:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll", imageview_fullscreen %s && del /f %s' % (file, file)
(malheureusement, utiliser %ProgramFiles% ne fonctionne pas; il faut donc indiquer le bon chemin soi-même).
Cela revient à hardcoder la visonneuse Windows; on peut bien sur la remplacer par un autre programme.
Partager