如何在Python/Django中获取图像标题
如何在Python/Django中获取图像标题
我想知道在你上传图片的时候,Facebook和Flicker是如何获取图片的标题的。\n有两个需要注意的地方。\n1. 图片标题(我们通常称之为名称)\n2. 图片描述标题(您可以查看图片属性并转到详细信息,然后在描述标题下查看标题,这是隐含且不可见的标题)\n当我们上传图片到Facebook和Flicker时,它们会从图片中提取这些信息,并将其设置为标题。\n我如何使用Python / Django / PIL实现这个功能?\n以这个图片为例。下载并查看其属性、详细信息和标题。尝试在Facebook和Flicker上上传,它们会提取这些信息。\n
\n
编辑
\n这是一个展示我在尝试的图片。请注意标题字段已经填写,Facebook正在提取这些信息,但是Python代码没有提取到。\n当我添加了Subject字段(标题下的一个字段)时,我能够获取到图片描述。\n这里有两张图片。\n\n
第二张图片。
\n\n
图片链接
\n图片一(仅有标题)和\n图片二(有标题和Subject)\n
注意:
\n当我用记事本打开文件时,可以看到描述信息...\n
如何在Python/Django中获取图像标题?
问题出现的原因:
根据问题描述,最初的解决方法是使用PIL库中的_getexif()函数获取图片的exif数据,然后通过查找exif字典中的Title字段来获取图像标题。然而,经过尝试后发现,在exif中并没有找到Title字段。因此,提问者认为可能需要进一步研究exif数据,或者尝试使用问题中提供的图片来查看标题。
解决方法:
为了获取更干净的字典数据,可以使用PIL库中的TAGS来将exif数据中的字段名转换为易读的字段名,并且只保留存在于TAGS中的字段。代码如下:
from PIL import Image, ExifTags img = Image.open('img.jpg') exif = { ExifTags.TAGS[k]: v for k, v in img._getexif().items() if k in ExifTags.TAGS }
然而,尽管这样做可以获取到更易读的exif字典,但仍然无法找到标题字段。提问者建议重新下载图片并查看属性中的详细信息,以便确认是否存在标题字段。代码如下:
import os # 获取文件名(不包括扩展名) title = os.path.splitext(img.filename)[0]
如果是在Django中使用,可以直接通过`request.FILES['my_file'].name`来获取文件名,无需使用PIL库。代码如下:
title = request.FILES['my_file'].name
然而,提问者意外地发现在重新下载图片后确实找到了标题字段。按照之前的做法,通过`exif['ImageDescription']`可以获取到标题字段的值。代码如下:
title = exif['ImageDescription']
通过使用PIL库中的相关函数和Django的文件上传功能,可以获取图像的标题字段。