6๐
I think this is down to the behavior of NamedTemporaryFile
on Windows. From the documentation:
This function operates exactly as
TemporaryFile() does, except that the
file is guaranteed to have a visible
name in the file system (on Unix, the
directory entry is not unlinked). That
name can be retrieved from the name
member of the file object. Whether the
name can be used to open the file a
second time, while the named temporary
file is still open, varies across
platforms (it can be so used on Unix;
it cannot on Windows NT or later).
(emphasis mine)
in the line:
im.save(tf2.name, "JPEG")
save
presumably tries to open the file so that it can write to it.
From the PIL docs you can pass save
a file object instead of a filename so replacing the above with
im.save(tf2, "JPEG")
may help.
3๐
I regret but mikejโs answer is not a solution at all as PIL supports both syntax examples. Probably, I copied the same piece of software from somewhere, and it works perfectly on my linux machines but not on windows 7. The reason is not in the image save command but rather in the following one. The command โฆ
self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False)
โฆ causes the permission denied error because the file is still open and cannot be opened twice at least on windows. The same error can be simulated by
copyfile(tf2.name,"some-new-filepath")
A proper workaround is
- Create a temporary file that is not deleted when closed
- Save and close the thumbnail
- Remove the temporary file manually
This works no matter how you save the thumbnail.
tf = NamedTemporaryFile(delete=False)
im.save(tf.name, "PNG")
#im.save(tf, "PNG")
tf.close()
copyfile(tf.name,"some-new-filepath")
os.remove(tf.name)
- [Django]-What's the meaning of including 'random salt' in password hashing of django framework?
- [Django]-Django ValueError: 'dtedeclared with a lazy reference to โฆ..' when changed Model Name
- [Django]-"Last" tag not working
- [Django]-Django templates split text on fullstop