如何在Python/Django中获取图像标题

6 投票
2 回答
8061 浏览
提问于 2025-04-17 20:46

我在想,Facebook和Flicker是怎么在你上传图片时获取图片标题的。

这里有两点需要注意:

  1. 图片标题(我们通常称之为名称)
  2. 图片描述标题(你可以查看图片属性,进入详细信息,看到描述标题下的标题,这个是隐含的,不是可见的标题)

当我们把图片上传到FacebookFlicker时,它们会从图片中提取这些信息,并将其设置为标题。

我该如何用Python / Django / PIL来做到这一点呢?

找一张这样的图片作为例子。下载并查看它的属性、详细信息、描述和标题。试着上传到FacebookFlicker,它们会提取这些信息。


编辑

这是我尝试的图片。看,标题字段已经填好了,Facebook正在提取这些信息,但Python代码却没有。当我也添加主题字段时(这是标题下的一个字段),我能够获取到图片描述。这里有两张图片。

在这里输入图片描述

第二张图片。

在这里输入图片描述

图片链接

第一张图片(只有标题)第二张图片(有标题和主题)

注意:

当我在记事本中打开文件时,可以看到描述。

<dc:description> <rdf:Alt> <rdf:li xml:lang="x-default">heeeeeeeeeeeeeeeee</rdf:li> </rdf:Alt> </dc:description> 

2 个回答

1

我想把图片标题放到 caja-columns 里,经过这里的帮助,我想出了一个办法。

首先,从这个链接安装 caja-columns.py:https://gist.github.com/infirit/497d589c4dcf44ffe920

然后,编辑代码,改成这样:

from PIL import Image
from PIL import ExifTags
from PIL.ExifTags import TAGS

...


                            im = Image.open(filename)
                            exif_data = im._getexif()
                            exif = {
                                    TAGS[k]: v
                                    for k, v in im._getexif().items()
                                    if k in TAGS
                            }

                            file.add_string_attribute('title',exif['ImageDescription'])                                file.add_string_attribute('pixeldimensions',str(im.size[0])+'x'+str(im.size[1]))

希望这样你能在图片中看到填充好的标题字段。

1

你可以用PIL来实现这个功能:

from PIL import Image
img = Image.open('img.jpg')
exif_data = img._getexif()

(这个方法是我从这个回答中得到的:https://stackoverflow.com/a/4765242/2761986

编辑:如果想要一个更整洁的字典,可以这样做(这个方法也是从上面的回答借来的):

from PIL.ExifTags import TAGS
exif = {
    TAGS[k]: v
    for k, v in img._getexif().items()
    if k in TAGS
}

撰写回答