2017-07-13 163 views
1

是否可以获取已从Image对象打开的图像的文件名?我检查了API,最好的是PIL.Image.info,但是当我检查它时,这似乎是空的。 还有什么我可以用来获得这个信息在PIL图像库吗?从图像PIL中获取图像文件名

(是的,我知道我可以传递文件名到函数。我正在寻找另一种方式来做到这一点。)

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

因为您是打开文件的人,为什么不直接保存文件名呢? –

+0

@BryanOakley在括号中看我的笔记。 除非你的意思是,我可以将它保存在信息词典中?在这种情况下,这是一个答案,你可以写出来。 –

+0

想想这个的方式可能是,我正在写foo_img(),而其他人正在调用它。我希望将img_input作为我函数的唯一输入。有没有办法让我获得文件名而不需要为我的函数添加输入? –

回答

3

我不知道这是任何地方的记载,但单纯用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解决这个问题搞定了,或者你在您尝试使用它之前可以测试以查看对象是否具有文件名:

>>> hasattr(im, 'filename') 
True 
>>> hasattr(im2, 'filename') 
False 
>>> if hasattr(im, 'filename'): 
    print(im.filename) 

c:\temp\temp.jpg 
+0

你是对的,它没有记录,但它确实存在。 谢谢! –

1

Image对象有一个filename属性。

from PIL import Image 


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

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