从 PIL 图像中获取图像文件名

20

我已经打开了一个图像对象,是否有可能获得该图像的文件名?我查看了API文档,最接近的是PIL.Image.info,但当我检查时它为空。在PIL Image库中有其他方法可以获取这些信息吗?

(是的,我知道可以将文件名传递给函数。我正在寻找另一种方法来实现这一点。)

例如:

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'))

既然是你打开文件,为什么不直接保存文件名呢? - Bryan Oakley
@BryanOakley 请看我的括号里的注释。 除非你的意思是,我可以将它保存在信息字典中?如果是这样,那就是一个答案,你可以写出来。 - Derek Halden
思考这个问题的方式可能是,我正在编写foo_img()函数,而其他人正在调用它。我希望img_input成为我的函数中唯一的输入。有没有办法在不向函数添加输入的情况下获取文件名? - Derek Halden
不能保证图像最初是从文件中生成的,你同样可以使用 Image.new - Mark Ransom
@MarkRansom,但如果是这样的话,那些信息被存储在哪里? - Derek Halden
我希望我知道,否则我会留下一个答案。 - Mark Ransom
3个回答

31

我不知道这是否有任何文档记录,但仅仅使用dir命令在我打开的图像上显示了一个名为filename的属性:

>>> im = Image.open(r'c:\temp\temp.jpg')
>>> im.filename
'c:\\temp\\temp.jpg'

遗憾的是,您无法保证该属性将存在于该对象上:

>>> 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'

你可以使用 try/except 来捕获 AttributeError,或者在尝试使用它之前测试对象是否有文件名来解决这个问题:

你可以使用 try/except 来捕获 AttributeError,或者在尝试使用它之前测试对象是否有文件名来解决这个问题:
>>> hasattr(im, 'filename')
True
>>> hasattr(im2, 'filename')
False
>>> if hasattr(im, 'filename'):
    print(im.filename)

c:\temp\temp.jpg

8

Image对象具有filename属性。

 from PIL import Image


 def foo_img(img_input):
     print(img_input.filename)

 foo_img(Image.open('/path/to/some/img.img'))  

2
另一种方法是使用初始文件位置进行操作:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接