Est-il possible d'obtenir le nom de fichier d'une image que j'ai déjà ouverte à partir d'un objet Image? J'ai vérifié l'API, et le mieux que j'ai pu trouver était le PIL.Image.info, mais qui semble vide lorsque je le vérifie. Puis-je utiliser autre chose pour obtenir ces informations dans la bibliothèque d'images PIL?
(Oui, je me rends compte que je peux passer le nom de fichier dans la fonction. Je cherche une autre façon de le faire.)
c'est à dire.
from PIL import Image
def foo_img(img_input):
filename = img_input.info["filename"]
# I want this to print '/path/to/some/img.img'
print(filename)
foo_img(Image.open('/path/to/some/img.img'))
Je ne sais pas si cela est documenté quelque part, mais simplement en utilisant dir
sur une image que j'ai ouverte a montré un attribut appelé filename
:
>>> im = Image.open(r'c:\temp\temp.jpg')
>>> im.filename
'c:\\temp\\temp.jpg'
Malheureusement, vous ne pouvez pas garantir que cet attribut sera sur l'objet:
>>> im2 = Image.new('RGB', (100,100))
>>> im2.filename
Traceback (most recent call last):
File "<pyshell#50>", line 1, in <module>
im2.filename
AttributeError: 'Image' object has no attribute 'filename'
Vous pouvez contourner ce problème en utilisant un try/except
pour attraper le AttributeError
, ou vous pouvez tester pour voir si l'objet a un nom de fichier avant d'essayer de l'utiliser:
>>> hasattr(im, 'filename')
True
>>> hasattr(im2, 'filename')
False
>>> if hasattr(im, 'filename'):
print(im.filename)
c:\temp\temp.jpg
L'objet Image
possède un attribut filename
.
from PIL import Image
def foo_img(img_input):
print(img_input.filename)
foo_img(Image.open('/path/to/some/img.img'))
Une autre façon de procéder est d'utiliser l'emplacement initial du fichier:
def getImageName(file_location):
filename = file_location.split('/')[-1]
location = file_location.split('/')[0:-1]
filename = filename.split('.')
filename[0] += "_resized"
filename = '.'.join(filename)
new_path = '/'.join(location) + '/' + filename
return new_path