web-dev-qa-db-ja.com

画像PILから画像ファイル名を取得

既に開いている画像のファイル名を画像オブジェクトから取得することはできますか?私はAPIを確認しましたが、思いついたのはPIL.Image.infoでしたが、確認したところ空であるようです。 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'))
6
Derek Halden

これがどこに文書化されているかはわかりませんが、開いた画像で単に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
13
Mark Ransom

Imageオブジェクトにはfilename属性があります。

 from PIL import Image


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

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

別の方法は、最初のファイルの場所を使用することです。

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
0
Nicolae