[Tutor] Python Image Library

Michael C mysecretrobotfactory at gmail.com
Thu May 18 11:14:00 EDT 2017


Did you go into the source code of PIL/Pillow?  Awesome!!!

On Wed, May 17, 2017 at 7:52 PM, eryk sun <eryksun at gmail.com> wrote:

> On Thu, May 18, 2017 at 1:58 AM, Michael C
> <mysecretrobotfactory at gmail.com> wrote:
> > when I run this, while it's called test.pyw, this pops up
> >
> > from PIL import Image
> >
> > im = Image.open('1.bmp')
> > im.show()
>
> Ok, I stand corrected. It's something weird, and most likely due to
> Windows support here being an afterthought throw in just for coverage,
> instead of something anyone actually cared about. The code does indeed
> use os.system to show the file, which is just about the worst thing
> one can do here for a Windows viewer.
>
>     >>> print(inspect.getsource(ImageShow.WindowsViewer))
>         class WindowsViewer(Viewer):
>             format = "BMP"
>
>             def get_command(self, file, **options):
>                 return ('start "Pillow" /WAIT "%s" '
>                         '&& ping -n 2 127.0.0.1 >NUL '
>                         '&& del /f "%s"' % (file, file))
>
>     >>> print(inspect.getsource(ImageShow.Viewer.show_file))
>         def show_file(self, file, **options):
>             """Display given file"""
>             os.system(self.get_command(file, **options))
>             return 1
>
> The WindowsViewer class preferrably should override show_file to  call
> ShellExecuteExW directly via ctypes, and wait (if possible) to delete
> the temporary file. Or at least use subprocess.call with shell=True,
> which will hide the console window. Note that being able to wait on
> the image viewer is not guaranteed. For example, the image viewer in
> Windows 10 is an app that cannot be waited on.
>
> Since you already have a file on disk, you could skip PIL completely.
> Just use os.startfile('1.bmp').
>


More information about the Tutor mailing list